มุมมองตารางแบบคงที่นอก UITableViewController


159

หลังจากอัปเดต Xcode ใหม่แอปของฉันไม่ตรวจสอบและแสดงข้อผิดพลาดนี้:

มุมมองตารางคงที่จะถูกต้องเฉพาะเมื่อฝังอยู่ในอินสแตนซ์ UITableViewController

มีโอกาสที่จะแก้ปัญหาได้อย่างง่ายดาย?


ขึ้นอยู่กับสาเหตุที่คุณใช้คลาสย่อย UIViewController แทนที่จะเป็น UITableViewController
David Berry

3
เพราะผมต้ององค์ประกอบอื่น ๆ ภายในมุมมองที่ไม่ได้อยู่ใน UITableViewController
ฟรานเชส S

1
พบปัญหาเดียวกันที่นี่ เพิ่งอัพเกรด (หรือปรับลดรุ่นตามที่ดูเหมือน) จนถึง Xcode 5.1 และฉันมีปัญหาเดียวกัน ฉันมีสแตติกเซลล์จำนวนมากในคลาสย่อย UITableViewController ภายใน UISplitViewController ของฉัน
Stefan Arambasich

เริ่มเกิดขึ้นกับฉันด้วยหลังจากการอัพเกรด ฉันมีตัวควบคุมมุมมองบางส่วนที่สร้างขึ้นด้วยเซลล์แบบสแตติกมันไม่เหมาะ แต่มันทำงานได้ดีมาก่อน
jdmunro

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

คำตอบ:


341

วิธีเดียวที่จะได้รับ UITableView แบบคงที่พร้อมกับตัวควบคุมอื่น ๆ บนหน้าจอเดียวกันคือการใช้มุมมองคอนเทนเนอร์ ทำตามวิธีนี้มันทำงานได้อย่างสมบูรณ์แบบ:

  1. ลาก ViewController ไปยังกระดานเรื่องราวของคุณ
  2. ลาก TableViewController ไปยังกระดานเรื่องราวของคุณ
  3. ถัดไปลากมุมมองคอนเทนเนอร์ไปยัง ViewController ของคุณและปรับขนาดตามขนาดที่คุณต้องการ (เล็กกว่ามุมมอง) -> เมื่อคุณลากมุมมองคอนเทนเนอร์มันจะสร้างส่วนต่อท้ายและมุมมองอื่น ลบส่วนต่อท้ายและมุมมองนั้นออก
  4. จากนั้นคลิก ctrl ในคอนเทนเนอร์ของคุณแล้วลากไปที่ TableViewContoller ใหม่ของคุณ เลือกฝัง
  5. จัดรูปแบบ TableView ตามที่คุณต้องการ -> รวมถึงสแตติกเซลล์

โชคดี.

คำตอบนี้ถูกค้นพบแล้วและให้ที่นี่: G.Huebner -> http://web.archive.org/web/20140928102504/http://iphonedevsdk.com/forum/iphone-sdk-development/111800-static-table- มุมมองเซลล์เท่านั้นทำงาน-in-a-uitableviewcontroller.html


จะใช้ทางออกหรือการกระทำที่ไหน? ในหรือฉันควรจะต้องใช้เวลาUIViewController UITableViewController
Bhavin Ramani

@ Bhavin Ramani: เนื่องจากเป็น UITableViewController ในคอนเทนเนอร์ฉันขอแนะนำให้ใช้คลาส / คลาสย่อยสำหรับเก็บ IBOutlets ของคุณ
LukeSideWalker

2
ผมคิดว่าทั้ง "เซลล์คงที่" UITableViewControllerความคิดที่จะดำเนินการในลักษณะที่ขึ้นอยู่กับบางฟังก์ชันการทำงานภายในของ
Nicolas Miari

2
ขอบคุณสำหรับสิ่งนี้. สามารถยืนยันได้ว่าทำงานใน Xcode 8.3.1
Atharva Vaidya

ยอดเยี่ยมมาก! ฉันกำลังมองหาวิธีแก้ปัญหาสำหรับชั่วขณะนี้
Jason Foglia

8

UITableView แบบคงที่ต้องอยู่ใน UITableViewController ดังนั้นคุณจะต้องวางตารางใน UITableViewController แล้วเพิ่มเป็น childView ไปยัง MainViewController

คุณสามารถอ้างอิง https://iphoneidoit.blogspot.in/2013/10/static-uitableview-in-uiviewcontroller.html


1
มีหลายวิธีก่อนหน้านี้ (เช่นการเก็บเซลล์) แต่ตอนนี้มันเป็นข้อผิดพลาดโดยไม่คำนึงถึง ฉันคิดว่าคำถามกำลังเสนอว่ามีวิธีระงับข้อผิดพลาดหรือไม่
Matthew Knippen

ใช่มันเป็น น่าเสียดายที่ฉันลงเอยด้วยการแก้ปัญหาโดยใช้ tableView แบบไม่คงที่
Francesco S

1
Yikes จำนวนงานที่ต้องแปลงเป็นแบบไม่คงที่เนื่องจากไฟล์ทั้งหมดIBOutletในไฟล์คอนโทรลเลอร์มุมมองของฉันนั้นมากเกินไปและ IMO ไม่สามารถยอมรับการอัปเดตที่จะทำลายสิ่งนี้โดยไม่มีคำเตือนหรือบันทึกสิ่งนี้ในบันทึกการเปลี่ยนแปลง ( ฉันคิดว่ามันยังคงใช้ได้อย่างสมบูรณ์บนกระดาษที่จะมีUITableViewControllerกับเซลล์แบบคงที่ภายใน a UISplitViewContoller. ฉันได้ติดต่อฝ่ายสนับสนุนของนักพัฒนาของ Apple และได้รับการตอบกลับทางอีเมลที่ไม่เป็นประโยชน์โดยทั่วไปที่เชื่อมโยงฉันกับฟอรัมฉันคิดว่าฉันจะลอง หากมีคนอื่นที่มีปัญหาเดียวกันหลังอัปเดต
Stefan Arambasich

4

ฉันคิดว่าสิ่งที่คุณกำลังทำคือคุณกำลังลาก ViewController เป็นอันดับแรกบนสตอรี่บอร์ดแล้วลาก TableView บน ViewController ด้วยวิธีนี้คุณไม่สามารถใช้เซลล์ตารางแบบคงที่ได้ สิ่งนี้ที่คุณควรทำคือการลาก TableViewController บนกระดานเรื่องราวหลักแทนที่จะเป็น ViewController จากนั้นเลือกเซลล์แบบคงที่ ด้วยวิธีนี้คุณสามารถทำงานกับเซลล์แบบคงที่และสามารถใช้องค์ประกอบใด ๆ ในเซลล์แบบคงที่ได้


0

ถ้าคุณใช้ tableView แบบคงที่จริงๆคุณควรพิจารณาคัดลอก / วางทุกอย่างลงใน ScrollView หรือ StackView

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