【问题标题】:iPhone - Refreshing TableView VC from higher ViewControlleriPhone - 从更高的 ViewController 刷新 TableView VC
【发布时间】:2011-07-30 20:43:32
【问题描述】:

我有 ViewController (A) 和 TableView,其中每一行都是一个目录名称。每行都在推送一个新的 ViewController (B)。在 ViewController B 中,我正在运行删除当前打开的目录的方法。但是,当我弹出视图并返回 TableView 时,我显然仍然有这个目录在列表中。我该如何解决?

如何在返回导航时刷新 TableView?

不,-viewWillAppear 中的简单 [self.tableView reloadData] 并没有真正起作用。

代码:

我的 -viewWillAppear:

- (void)viewWillAppear:(BOOL)animated {
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    self.arrFolders = [[NSMutableArray alloc] init];
    [self allFilesInDocuments:docDir];
}

-allFilesInDocuments 只是将项目添加到数组 ([arrFolders addObject:folder];)。

-tableView:cellForRowAtIndexPath:里面我用

添加数据
cell.textLabel.text = [arrFolders objectAtIndex:indexPath.row];

【问题讨论】:

  • [self.tableView reloadData];刷新表格的简单方法。
  • 你读过整个问题吗?

标签: iphone uitableview uiviewcontroller


【解决方案1】:

编辑数据源并在 -viewWillAppear 中重新加载应该可以正常工作,但如果失败,您可以通过父视图控制器调用或 NSNotification 执行更新。

【讨论】:

  • NSNotification 更好,在没有删除任何内容时为您节省不必要的重新加载。
  • 为项目视图创建一个自定义委托并将其分配给父级,这也可以,虽然涉及更多代码,但通常更简洁。
【解决方案2】:

使用 NSNotification。

在ViewController(A)的viewDidLoad中注册一个通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deletedRow:) name:@"deletedRow" object:nil];

同时添加选择器功能:

-(void) deleteRow:(NSNotification *)notif{
[self.tableView reloadData];

}

最后在子视图控制器中,在您的 Delete 函数中发布通知:

[[NSNotificationCenter defautCenter] postNotificationName:@"deletedRow" object:nil userInfo:nil];

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 2023-03-08
    相关资源
    最近更新 更多