【问题标题】:Calling UITableViews delegate methods directly直接调用 UITableViews 委托方法
【发布时间】:2011-02-07 21:53:22
【问题描述】:

我正在寻找一种直接调用编辑方法的方法。

- (void)tableView:(UITableView *)theTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

我有所有的逻辑来为操纵的单元格设置动画,从我的模型数组中删除 等在这​​种方法中。当用户滑动、添加或重新排列时会调用它,但我想调用 它手动/直接作为后台线程更改我的模型。

我已经像这样构造了一个 NSIndexPath:

NSIndexPath *path = [NSIndexPath indexPathForRow:i inSection:1];

我只是不知道如何调用类似的东西:

[self.tableview commitEditingStyle:UITableViewCellEditingStyleDelete forRowAtIndexPath:path];

我是否需要以其他方式访问这种普通样式 UITableView 的方法?

谢谢:)

【问题讨论】:

    标签: iphone uitableview delegation


    【解决方案1】:

    我不确定,但如果你调用该方法可能会

    - (void)setEditing:(BOOL)editing animated:(BOOL)animate
    

    可能是调用了 commitEditingStyle 方法。

    【讨论】:

    • 谢谢你们,我可以看到我的问题可以被解读为好像我使用的是标准方法,对此感到抱歉:)
    【解决方案2】:

    我不明白为什么你不能调用那个方法,如果你只想让你的代码被执行。文档给出了一个重要的提示,即

    - (void)setEditing:(BOOL)editing animated:(BOOL)animate
    

    无论如何都会调用该数据源方法。如果您确实想要这样做,那么将您的代码从该方法重构为另一个方法并从数据源方法和代码中的其他地方调用它会更有意义。

    如果您真的只想反映模型中的变化,请致电 [tableView reloadData] - 这就是它的用途。

    【讨论】:

    • 您好 Paull 我已经构建了一组自定义单元格,它使用自己的一组编辑图形。所以我已经知道用户希望删除这些单元格。如果我将编辑设置为“是”,它将显示执行此操作的框架控件,这不是我的目标。我同意直接调用 commitEditingStyle 应该是直截了当的,但是这样做: [self.tableView:self.tableView commitEditingStyle:UITableViewCellEditingStyleDelete forRowAtIndexPath:path];导致“无法识别的选择器”消息,即使 Xcode 很乐意将它作为 tableView 上的方法提供给我?
    • 方法名是正确的——但不是tableView实现的;它是数据源必须实现的一种方法,以反映您对模型中的表所做的更改。
    • 我明白了。因此,我应该更改模型以反映事物的当前状态,然后通过正确的渠道进行更新。当我执行 tableview.dataSource = self 时,我实现了该方法。我可能必须实现 beginUpdates 和 endUpdates 而不是在认为尚未进行任何更改时尝试强制 TableView 执行动画。谢谢,我保证不再与框架抗争:)
    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多