【问题标题】:What's the best way to refresh a UITableView within a UINavigationController hierarchy在 UINavigationController 层次结构中刷新 UITableView 的最佳方法是什么
【发布时间】:2011-02-09 08:08:24
【问题描述】:

我对 iPhone 开发还很陌生,一直在努力寻找我认为解决此问题的巧妙方法。

我有一个用户界面,其中记录数据的摘要显示在导航控制器内的表格中。当用户单击一行的附件按钮时,一个新视图被推送到导航控制器上,显示一个视图,用户可以在其中编辑相应记录中的数据。完成后,从导航控制器的堆栈中弹出编辑视图,并将用户返回到表格视图。

我的问题是当用户返回表格视图时,表格仍然显示记录被编辑之前的数据状态。因此,我必须重新加载表数据以显示更改。

在显示之前似乎无法重新加载表数据,因为调用只更新显示的记录。在表格显示后重新加载会导致旧数据在用户眼前发生变化,我对此不太满意。

在我看来,这在 iPhone 应用中是一件很正常的事情。

任何人都可以建议这样做的最佳实践方法吗?我觉得我错过了什么。

干杯 - 史蒂夫。

【问题讨论】:

    标签: iphone uitableview uinavigationcontroller


    【解决方案1】:

    标准方法一开始可能听起来很麻烦,但在很多情况下都是有用的模式。

    在您的 tableview 类中创建一个方法,如:

    -(void)editDone {
        [self.tableView reloadData];
    }
    

    向您的编辑控制器添加一个属性,例如:

    @property (assign) id delegate;
    

    在您的配件被点击时设置委托:

    editController.delegate = self;
    

    编辑完成后,像这样调用你的方法:

    [delegate performSelector:@selector(editDone) withObject:nil];
    

    您可以创建类似的方法来处理您的编辑组件的取消,或执行模式编辑控制器的解除等。如果您愿意,将所有这些都放在一个协议中被认为更优雅。

    【讨论】:

      【解决方案2】:

      我将通过以下方式实现:

      1. 保存点击单元格的 indexPath。

      2. 实现视图控制器的-[UIViewController viewWillAppear:] 方法,其中包含UITableView。如果保存的 indexPath 不为零,则重新加载指定的单元格:

        -[UITableView reloadRowsAtIndexPaths:withRowAnimation:]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多