我在 UITableView
中创建了一个自定义单元格。样式设置为自定义。标识符设置为 customCell。附件设置为细节。 TableView 内容设置为动态原型(prototype)。
该表加载了来自核心数据的数据,并且在首次出现时看起来非常完美。当用户点击单元格中的详细信息图标时,会出现一个新 View 的 segue,这样用户就可以编辑单元格中的数据并将其保存到核心数据中。当用户完成编辑并点击“保存”按钮时, View 返回到 UITableView
,但刚刚编辑过的单元格显示为“基本”单元格,而不是 customCell。如果我点击单元格,它会突出显示并且自定义单元格内容会出现在基本单元格内容之上。
我似乎无法解决这个问题。任何人都可以提出建议吗?
这是发送到编辑 View Controller 的 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];
}
有什么建议吗?
这是我在 TableViewController 中的 cellForRowAtIndex
- (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];
}
最佳答案
当您从 EditPunchItemViewController 返回时,您是否尝试重新加载表格?
放入主视图 Controller :
- (void)viewWillAppear:(BOOL)animated {
if (self.tableView) {
[self.tableView reloadData];
}
}
关于ios - 更改单元格中的数据后,UITableView 中的自定义单元格不会正确重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22128321/