ios - 更改单元格中的数据后,UITableView 中的自定义单元格不会正确重新加载

标签 ios uitableview ios7

我在 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/

相关文章:

iphone - iPhone模拟器日历是否为事件正确存储 "availability"?

ios - 如何测量 UITableViewCell 的加载时间?

ios - 从 UITableView 选择行时将核心数据对象传递给另一个 View Controller

ios - UITableViewCell 中的内容未显示

ios - 在 iOS Swift 中单击按钮时向 UITableView 添加一个项目

ios - DiskCookieStorage 改变策略从 2 到 0 - 受众网络 NativeAdSample

ios - 在iOS应用程序中实现APNS的完整过程

ios - iPhone 5s Touch ID 传感器 API

ios - 具有 Web View 的模态视图使应用程序在 iOS7 中崩溃

ios - NSExpressionDescription 引发的异常与核心数据内存存储