xcode / storyboard: ไม่สามารถลากปุ่มบาร์ไปที่แถบเครื่องมือที่ด้านบนได้


99

ฉันมีตัวควบคุมมุมมองที่เป็นมุมมองรายละเอียดของตาราง เมื่อคุณคลิกที่แถวของตารางจะนำคุณไปยังมุมมองรายละเอียด มุมมองรายละเอียดจะฝังอยู่ในตัวควบคุมการนำทางซึ่งจะมีปุ่มที่ด้านซ้ายบนของแถบนำทางที่ส่งคุณกลับไปที่ตาราง จนถึงตอนนี้ดีมาก

ตอนนี้ฉันต้องการเพิ่มปุ่มแก้ไขที่ด้านขวาของแถบนำทางเพื่อให้คุณสามารถแก้ไขมุมมองรายละเอียดได้ แผนของฉันคือจะเพิ่มตัวควบคุมมุมมองอื่นที่ช่วยให้คุณแก้ไขรายละเอียดของรายการได้ สิ่งมาตรฐาน

อย่างไรก็ตามเมื่อฉันพยายามลากรายการปุ่มแถบจากรายการวัตถุไปยังแถบนำทางจะไม่เกิดขึ้น แต่เมื่อฉันปล่อยปุ่มเมาส์มันจะออกจากปุ่มบาร์บนตัวควบคุมแถบแท็บที่ด้านล่าง (โครงร่างการนำทางของฉันประกอบด้วยแท็บต่างๆและสำหรับแต่ละแท็บตารางมุมมองรายละเอียด ฯลฯ )

ใครก็ตามที่พบปัญหานี้มาก่อนและสามารถแนะนำสิ่งที่ฉันทำผิดหรือวิธีแก้ปัญหาบางอย่างเพื่อเพิ่มรายการปุ่มแถบที่ด้านขวาของหน้าจอการนำทาง ต้องใส่รหัสหรือไม่?

ขอบคุณสำหรับคำแนะนำใด ๆ


ตรวจสอบบทช่วย
casillas

ฉันสามารถเพิ่มปุ่มโดยใช้ self.navigationItem.rightBarButtonItem = self.editButtonItem; และสร้าง editvc ใหม่ในสตอรีบอร์ดอย่างไรก็ตามฉันไม่แน่ใจว่าจะสร้างเซ็กส์ได้อย่างไร ไม่สามารถทำได้ในสตอรีบอร์ดเพราะมองไม่เห็นปุ่มแก้ไขดังนั้นฉันเดาว่ามันต้องอยู่ในโค้ด จะพยายามเตรียมความพร้อม?
user1904273

หากคำตอบข้อใดข้อหนึ่งช่วยคุณได้คุณควรยอมรับ :)

คำตอบ:


157

ฉันมีปัญหาเดียวกันกับการใช้ Xcode6 และฉันสังเกตเห็นว่า UINavigationItem ถูกเพิ่มโดยอัตโนมัติสำหรับ ViewController ตัวแรกที่คุณฝังลงใน NavigationController แต่สำหรับ ViewControllers ที่ตามมาคุณจะต้องเพิ่มด้วยตนเองดังนี้:

  1. ในไลบรารีวัตถุค้นหารายการการนำทางจากนั้นลากไปยัง ViewController ที่ 2 ของคุณในกระดานเรื่องราว
  2. ในไลบรารีวัตถุให้ค้นหา รายการปุ่มแถบจากนั้นลากรายการการนำทางที่คุณสร้างไว้ในขั้นตอนก่อนหน้า

ตอนนี้คุณจะมีปุ่มบาร์ของคุณติดอยู่ที่ด้านบนสุดของฉาก

อัปเดต โซลูชันยังคงใช้งานได้กับ XCode 7 แต่ฉันต้องการเพิ่มรูปภาพที่สื่อความหมายมากขึ้น ในกรณีที่ใครไม่คุ้นเคยกับชื่อมาตรฐานหรือชื่อทางเทคนิคที่กล่าวถึงข้างต้น สังเกตลูกศรสีแดงทางด้านขวาซึ่งหมายถึงขั้นตอนที่ 1 ขั้นตอนที่ 2 ที่กล่าวถึงข้างต้น นอกจากนี้โปรดสังเกตลำดับชั้นของมุมมองในสี่เหลี่ยมผืนผ้าสีแดงด้านซ้าย ป้อนคำอธิบายภาพที่นี่


2
ใช่นั่นทำเพื่อฉัน ฉันคิดว่านี่เป็นคำตอบที่ถูกต้อง XCode ดูเหมือนจะไม่เพิ่มรายการการนำทางไปยัง ViewControllers ที่ตามมา
Jeremy Chone

สิ่งนี้ถูกต้อง แต่ลูกศรสีแดงในภาพควรไปจากรายการปุ่มแถบในไลบรารีวัตถุไปจนสุดทางซ้ายกล่องสีแดง
malhal

คุณสามารถวางลงในผืนผ้าใบได้เช่นเดียวกับที่ลูกศรสีแดงระบุไว้หรือจะวางลงในโครงร่างเอกสารตามที่คุณแนะนำก็ได้ ไม่ได้สร้างความแตกต่าง
Wael Showair

ดีใจที่ฉันพบคำตอบนี้เพราะมันใช้งานได้ดี - ฉันแค่งุนงงว่าทำไม UINavigationItem ถึงไม่มีอยู่ใน Storyboard? เห็นได้ชัดว่าอยู่ที่รันไทม์เพราะโค้ดself.navigationItem.rightBarButtonItem = ...จะทำงาน ฉันเดาว่า UINavigationController ใน VC ตัวแรกจะสร้างอินสแตนซ์สำหรับ VC ที่ตามมาทั้งหมดที่ถูกผลักลงในสแต็ก อย่างไรก็ตามด้วยการลากหนึ่งรายการด้วยตนเองทำไมคุณไม่ลงเอยด้วย 2 UINavigationItems ที่อยู่บนยอดกันและกัน? สิ่งที่คุณลากด้วยตนเองและสิ่งที่มีอยู่แล้วจาก UINavigationController?
James Toomey

70

เคล็ดลับที่น่ารังเกียจ:

  1. เปลี่ยนการติดตามของคุณเพื่อผลักดัน
  2. ตั้งค่าเนื้อหาที่คุณต้องการ
  3. ตั้งค่ากลับไปแสดง

จากนั้นเนื้อหาจะสามารถแก้ไขได้และคุณมีรูปแบบที่ไม่เลิกใช้สำหรับการทำต่อ


ผู้ชายน่าเกลียดมาก แต่งานนี้สำหรับUIBarButtonItemบนตัวควบคุมมุมมองในXcode 7.3
mikeho

OMG มันยังคงทำงานใน XCode 8.2.1 เมื่อไหร่จะได้รับการแก้ไข? ไม่เลย
Dima Rostopira

นี่เป็นวิธีเดียวที่ฉันพบโดยไม่ต้องเพิ่มด้วยรหัส
Joshua

โอ้พระเจ้า ... ขอบคุณ (y)
Nasir Khan

ไม่อยากจะเชื่อเลยว่าข้อบกพร่องนี้ยังคงอยู่ที่นี่หลังจากผ่านไปกว่า 2 ปี
Carioni

33

ตัวควบคุมมุมมองของกระดานเรื่องราวของคุณอาจไม่มีไฟล์Navigation Item. คุณสามารถลากจากไลบรารีวัตถุและวางลงในตัวควบคุมมุมมองของคุณ

จากนั้นคุณจะสามารถลากและวางรายการปุ่มแถบไปทางด้านซ้ายหรือขวาของแถบนำทาง


1
วิธีนี้ใช้งานได้ แต่ฉันรู้สึกว่าสิ่งนี้เคยทำโดยอัตโนมัติตราบเท่าที่คุณมีการผลักดันต่อตัวควบคุม
aryaxt

นี่น่าจะเป็นคำตอบที่ถูกต้อง ส่วนที่เหลือดูเหมือนว่าจะแฮ็คฉัน
MK Yung


8

วิธีที่ฉันแก้ไขปัญหานี้คือแทนที่จะลาก UINavigationController ลงใน Storyboard และพยายามเพิ่ม UIBarButtonItems เข้าไปฉันลาก UITableViewController แล้วไปที่

Editor-> ฝังใน -> ตัวควบคุมการนำทาง

ซึ่งให้ผลลัพธ์เหมือนเดิมยกเว้นฉันสามารถเพิ่ม UIBarButtonItems ทั้งสองด้านของแถบนำทางได้โดยไม่มีปัญหา


น่าขึ้น !!
Vin

5

ปัญหา xcode จริง เคล็ดลับอย่างหนึ่งที่ได้ผลสำหรับฉันคือการเพิ่มปุ่มแถบในดูโครงสร้างไฟล์ทางด้านซ้ายการเพิ่มมุมมองโดยตรง หวังว่าจะช่วยคุณได้ :)


ได้ผล! ฉันเดาว่านี่เป็นวิธีแก้ปัญหาตราบใดที่ Apple แก้ไขข้อบกพร่องด้วย Xcode 8.2
Arjun Kalidas

5

ผมว่าเป็นบั๊ก ฉันมีปัญหาเดียวกันฉันแก้ไขปัญหานี้โดยปิดการใช้งานคลาสขนาดจากนั้นเปิดใช้งาน

คุณสามารถปิดใช้งานและเปิดใช้งานคลาสขนาดได้ในเอกสารตัวสร้างอินเทอร์เฟซ

ป้อนคำอธิบายภาพที่นี่


4

ฉันมีปัญหานี้เช่นกันปิดและเปิดโครงการใหม่ที่ได้ผลสำหรับฉัน


3

ฉันเชื่อว่ามันเป็นมุมมองของ XCode ฉันมีปัญหาเดียวกัน ฉันต้องรีเซ็ต Xcode และเปลี่ยนตำแหน่งของสิ่งต่าง ๆ บนกระดานเรื่องราวเพื่อให้มันไปได้ในที่สุด มันใช้งานได้แล้ว


3

ฉันคิดว่านี่เป็นข้อบกพร่องของ Xcode ใน Xcode 8 เปลี่ยนsegueสตอรีบอร์ดในก่อนตัวควบคุมมุมมองแถบแท็บเป็นตัวเลือกทั้งหมด ( show detail, present... ) showจากนั้นกลับไป ลองลากรายการปุ่มแถบและแก้ไขกระเบื้อง ได้ผลสำหรับฉัน!


1

คุณได้ลอง "ทำความสะอาด" โครงการของคุณหรือไม่? ฉันรู้ว่าบางครั้งช่วยฉันได้ (เพียงไปที่ "ผลิตภัณฑ์"> "ทำความสะอาด") หรือลบแถบนำทางแล้วลองอีกครั้ง

หากคุณคิดว่าเป็นข้อผิดพลาดในการเขียนโปรแกรมอย่าลังเลที่จะส่งต่อรหัสของคุณ เรายินดีที่จะช่วยเหลือทุกวิถีทางที่ทำได้ :)


1

คุณต้องรีเซ็ต xCode IDE ปิด xCode และเขียนโค้ดด้านล่างที่เทอร์มินัล ... มันจะทำงาน

rm -rf $HOME/Library/Application Support/Developer/Shared/Xcode
rm -rf $HOME/Library/Preferences/com.apple.dt.Xcode.*
rm -rf $HOME/Library/Saved\ Application\ State/com.apple.dt.Xcode.savedState
rm -rf $HOME/Library/Developer/Xcode

1

ปัญหาเดียวกัน. ฉันมี Table View Controller ภายใน Navigation Controller และ ViewControllers หลายตัวตามลงไปในห่วงโซ่ 'รายการการนำทาง' ถูกสร้างขึ้นโดยอัตโนมัติสำหรับตัวควบคุมมุมมองรูท FIRST และฉันสามารถเพิ่ม 'รายการปุ่มแถบ' ลงในสิ่งนี้ได้โดยไม่มีปัญหา ลากและวางผ่าน Storyboard แต่นั่นคือทั้งหมด ใน Table View Controller ต่อไปนี้และตัวควบคุมมุมมองเพิ่มเติมแม้ว่าจะอยู่ใน Navigation Controller เริ่มต้น (ปุ่มย้อนกลับที่สร้างขึ้นโดยอัตโนมัติปรากฏขึ้น) สตอรีบอร์ดจะไม่ให้ฉันเพิ่มรายการปุ่มแถบ

โซลูชันของ Wael Showair ไม่ได้ผลสำหรับฉัน รายการปุ่มแถบจะไม่ปรากฏขึ้น

ฉันแก้ไขโดยใช้โปรแกรมในตอนท้าย (Swift 2.0):

var testButton = UIBarButtonItem(title: "Test Button", style .Plain, target: self, action: "testButtonMethod")
self.tabBarController?.navigationItem.rightBarButtonItem = testButton

ไม่จำเป็นต้องใช้รายการการนำทางเพิ่มเติมหรือรายการปุ่มแถบ


1

ฉันประสบปัญหาเดียวกันมากเกินไปฉันสามารถแก้ไขปัญหานี้ได้โดยเลือกตัวเลือกตัวควบคุมมุมมองรูทจากนั้นในเมทริกซ์จำลองเปลี่ยนตัวเลือกแถบด้านบนเป็นแถบนำทางทึบแสงและสามารถเพิ่มรายการที่ด้านบนของแถบนำทางได้หวังว่า คำตอบนี้จะช่วยใครบางคน


1

ฉันมีปัญหาเดียวกันใน xcode 8 ฉันต้องปิด xcode และเปิดโปรเจ็กต์อีกครั้งจากนั้นฉันก็สามารถเพิ่มปุ่มแถบไปยัง Root Controller ได้โดยไม่มีปัญหาใด ๆ


1

สำหรับ XCode 8

มีคำตอบมากมายที่นี่ ฉันลองมาบ้างแล้ว แต่ไม่สามารถทำได้ ดังนั้นผมพบว่าวิธีการแก้ปัญหาของฉันเพียงแค่เลือกของคุณViewControllerไปคุณสมบัติสารวัตรส่วนและเปลี่ยนแถบด้านบนจะทึบแสงป้ายและบูม คุณจะเห็นแถบนำทางบนกระดานเรื่องราวของคุณ คุณสามารถเปลี่ยนชื่อหรือเพิ่มบางรายการได้ หากคุณไม่ต้องการให้ทึบแสงคุณสามารถเปลี่ยนสไตล์เป็นInferredได้

ป้อนคำอธิบายภาพที่นี่


1

ใน Xcode 10 ฉันเพิ่งเปลี่ยนประเภทของการต่อไปยังตัวควบคุมมุมมองใหม่นี้เป็น 'Push (เลิกใช้แล้ว)' เพิ่มรายการการนำทางตามที่ได้รับอนุญาตหลังจากที่ฉันเปลี่ยนสวิตช์นี้ หากคุณเปลี่ยนกลับไปใช้ประเภทการทำต่อที่คุณต้องการในตอนแรกรายการนำทางจะยังคงอยู่


0

แทนที่จะลาก "Bar Button Item" ไปที่ "Navigation Controller" ให้ลากไปที่ "Detail View Controller" เมื่อคุณฝังมุมมองรายละเอียดลงใน "มุมมองการนำทาง" "รายการการนำทาง" จะถูกเพิ่มลงใน "ตัวควบคุมมุมมองรายละเอียด" หากคุณลาก "รายการปุ่มแถบ" ไปทางด้านขวาของรายการการนำทางรายการนั้นจะรวมอยู่ใน "รายการปุ่มแถบด้านขวา"


0

เหมือนที่ Mark Lyons กล่าวว่าฉันใช้วิธีแก้ปัญหาเดียวกัน

  • ใช้ push segue ก่อน
  • เพิ่มรายการบาร์
  • ย้อนกลับเพื่อแสดงการทำต่อ
  • เสร็จแล้ว

0

ใน Xcode 11 คุณสามารถลากปุ่มไปที่แถบนำทางเพื่อสร้างปุ่มแถบของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.