ฉันได้สร้างเซลล์ที่กำหนดเองใน UITableView
สไตล์ถูกตั้งค่าเป็นกำหนดเอง ตัวระบุถูกตั้งค่าเป็น customCell อุปกรณ์เสริมถูกตั้งค่าเป็นรายละเอียด เนื้อหา Table View ได้รับการตั้งค่าเป็น Dynamic Prototypes
ตารางจะเต็มไปด้วยข้อมูลจากข้อมูลหลักและปรากฏอย่างสมบูรณ์แบบเมื่อปรากฏขึ้นครั้งแรก เมื่อผู้ใช้แตะไอคอนรายละเอียดในเซลล์ ส่วนต่อไปยังมุมมองใหม่จะปรากฏขึ้นเพื่อให้ผู้ใช้สามารถแก้ไขข้อมูลในเซลล์และบันทึกลงในข้อมูลหลักได้ เมื่อผู้ใช้แก้ไขเสร็จแล้วและแตะปุ่มบันทึก มุมมองจะกลับไปที่ UITableView
แต่เซลล์ที่เพิ่งแก้ไขจะปรากฏเป็นเซลล์ 'พื้นฐาน' ไม่ใช่เซลล์แบบกำหนดเอง ถ้าฉันแตะที่เซลล์ มันจะไฮไลท์และเนื้อหาเซลล์แบบกำหนดเองจะปรากฏเหนือเนื้อหาเซลล์พื้นฐาน
ดูเหมือนว่าฉันจะไม่สามารถแก้ไขปัญหานี้ได้ ใครสามารถแนะนำบางสิ่งบางอย่าง?
นี่คือส่วนของ prepareForSegue
ที่ส่งไปยังตัวควบคุมมุมมองการแก้ไข:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UITableViewCell*)sender {
if ([[segue identifier]isEqualToString:@"editPunchItemSegue"]) {
// DEFINE SEGUE DESTINATION
UINavigationController *navigationController = segue.destinationViewController;
EditPunchItemViewController *editPunchItemViewController = (EditPunchItemViewController*)navigationController.topViewController;
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
Punchitem *editPunchItem = (Punchitem*)[self.fetchedResultsController objectAtIndexPath:indexPath];
editPunchItemViewController.editPunchitem = editPunchItem;
และตอนนี้ใน View Controller ปลายทางซึ่งมีการแก้ไขข้อมูลหลัก นี่คือส่วนหนึ่งของเมธอด saveButtonPressed:
if ([_editSaveButton.title isEqualToString:@"Save"]) {
NSLog(@"Save Button has been PRESSED");
editPunchitem.punchitemRoomNumber = _editPunchitemRoomNumberField.text;
editPunchitem.punchitemDescription = _editPunchitemDescriptionField.text;
editPunchitem.punchitemLocation = _editPunchitemLocationField.text;
editPunchitem.punchitemRoomName = _editPunchitemRoomNameField.text;
editPunchitem.punchitemDate = _editPunchitemDateField.text;
// SAVE TO MANAGE OBJECT CONTEXT!
[super saveAndDismiss];
}
มีข้อเสนอแนะอะไรบ้าง?
นี่คือ cellForRowAtIndex ของฉันใน TableViewController
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Running %@ '%@'", self.class, NSStringFromSelector(_cmd));
static NSString *CellIdentifier = @"customCell";
// USING CUSTOM PROTOTYPE CELL:
CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
Punchitem *punchitem = [self.fetchedResultsController objectAtIndexPath:indexPath];
// USING CUSTOM PROTOTYPE CELL:
cell.cellLocationLabel.text = punchitem.punchitemLocation;
cell.cellDescriptionLabel.text = punchitem.punchitemDescription;
cell.cellRoomNameLabel.text = punchitem.punchitemRoomName;
return cell;
}
บันทึกและยกเลิกเป็นส่วนหนึ่งของคลาสย่อย นี่คือวิธีการ:
-(void) saveAndDismiss {
NSError *error = nil;
if ([self.managedObjectContext hasChanges]) {
if (![self.managedObjectContext save:&error]) { //SAVE FAILED
NSLog(@"YOUR SAVE FAILED! %@", [error localizedDescription]);
} else {
NSLog(@"SAVE SUCCEEDED!");
}
}
[self dismissViewControllerAnimated:YES completion:nil];
}