UITableViewCell แบบคงที่ส่งคืนศูนย์บน CellForRowAtIndexPath แต่สำหรับบางส่วนเท่านั้น

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

- (void)setUpAllCells
{
    //Charge Name
    NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:0];
    TableViewCellTextField *currentTextField = (TableViewCellTextField *)[[self tableView] cellForRowAtIndexPath:path];
    [currentTextField.textField setDelegate:self];

    //Charge Description
    path = [NSIndexPath indexPathForRow:1 inSection:0];
    currentTextField = (TableViewCellTextField *)[[self tableView] cellForRowAtIndexPath:path];
    [currentTextField.textField setDelegate:self];

    ...

    path = [NSIndexPath indexPathForRow:0 inSection:5];
    TableViewCellControl *currentControl = (TableViewCellControl *)[[self tableView] cellForRowAtIndexPath:path];
    [currentControl setValue:m_data->trailBurnTime];
}

ซึ่งเรียกมาจาก:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self setUpAllCells];
}

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

ฉันใช้รูปแบบนี้กับตัวควบคุมมุมมองอื่นอีกห้าตัว และไม่เคยเกิดเหตุการณ์เช่นนี้

นี่คือสิ่งที่ฉันได้ลองมาแล้ว:

  • ฉันทดสอบสิ่งนี้ด้วย TableViewCells ที่กำหนดเองของฉันเอง และเมื่อไม่ได้ผล UITableViewCells มาตรฐาน ส่วนสุดท้ายจะคืนค่าศูนย์เสมอ

  • ฉันจัดเรียงส่วนและเซลล์ใหม่ ส่วนสุดท้ายจะคืนค่าศูนย์เสมอ

  • ฉันลบส่วนนั้นออกจนหมด ส่วนอื่นๆ ยังคงใช้งานได้ตามปกติโดยไม่มีมัน

  • ฉันเพิ่มส่วนเพิ่มเติม สิ่งใดจากส่วนที่ 5 ส่งคืนศูนย์ที่ CellForRowAtIndexPath

ฉันกำลังสูญเสียที่นี่ ฉันไม่รู้ว่าอะไรเป็นสาเหตุของสิ่งนี้

ข้อเสนอแนะ?


person bindsniper001    schedule 23.05.2013    source แหล่งที่มา
comment
หากมุมมองตารางของคุณมี 6 ส่วน แสดงว่าไม่มีส่วนที่ 6 เหมือนกับที่คุณมีในโค้ดบิตสุดท้าย   -  person rdelmar    schedule 23.05.2013
comment
@rdelmar อ๊ะ ฉันพิมพ์ผิดแบบนั้น มันเป็น 5 ในรหัสดั้งเดิมของฉัน สิ่งที่เหลืออยู่จากการทดสอบที่ฉันทำตามที่อธิบายไว้ที่ด้านล่างของคำถาม   -  person bindsniper001    schedule 23.05.2013


คำตอบ (2)


ฉันไม่รู้ว่าทำไมคุณถึงได้ผลลัพธ์ตามที่ฉันทำ เมื่อฉันลองและบันทึกเซลล์ ฉันมีเพียงเซลล์ที่ถูกต้องสำหรับ 3 ส่วนแรกเท่านั้น สิ่งใดที่ผ่านมาส่วนที่ 2 เป็นโมฆะ จริงๆ แล้ว ฉันไม่แน่ใจว่าทำไมมันถึงใช้งานได้ เนื่องจากนี่ไม่ใช่วิธีที่ Apple บอกให้เติมมุมมองตารางแบบคงที่ คุณควรสร้าง IBOutlets ในตัวควบคุมมุมมองตารางของคุณให้กับองค์ประกอบ UI ในเซลล์ของคุณ ในเรื่องนี้ มุมมองตารางแบบคงที่จะทำหน้าที่เหมือนกับมุมมองแบบเลื่อนที่มีมุมมองย่อย มากกว่าที่จะเหมือนกับมุมมองตาราง คุณยังสามารถสร้าง IBOutlets ให้กับเซลล์ด้วยตนเองแทนองค์ประกอบ UI แต่ละรายการ จากนั้นใช้เครื่องหมายจุดเพื่อระบุคุณสมบัติใดๆ ในเซลล์ที่คุณกำหนดเอง หรือคุณสมบัติมาตรฐาน เช่น textLabel และ detailTextLabel

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

เรื่องตลกเกี่ยวกับคำถามของคุณคือเมื่อคุณเรียกใช้ฟังก์ชัน cellForRowAtIndexPath บน tableview ของคุณ ฉันเชื่อว่ามันจะเรียกฟังก์ชันการเรียกกลับของผู้รับมอบสิทธิ์ที่คุณควรใช้เป็น UITableViewDelegate ที่ให้ TableView ด้วย cellForRowAtIndexPath

เมื่อคุณใช้ฟังก์ชันนั้นแล้ว คุณจะได้เซลล์กลับมา ฉันคิดว่าฟังก์ชั่นที่คุณกำลังมองหาคือ:

– dequeueReusableCellWithIdentifier:forIndexPath:
– dequeueReusableCellWithIdentifier:

ดูที่นี่: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html

ฉันรู้ว่านั่นไม่ใช่คำตอบที่คุณกำลังมองหา แต่เป็นความจริง :)

person Aditya Nagrath    schedule 23.05.2013
comment
นี่คือวิธีการดูตาราง ฉันกำลังสร้างตัวควบคุมมุมมองตารางแบบกำหนดเอง ไม่ใช่มุมมองตาราง เนื่องจากฉันไม่ได้ลบล้างการใช้งานพื้นฐาน ฉันจึงไม่คิดว่าจำเป็นต้องทำเช่นนั้น - person bindsniper001; 23.05.2013