【问题标题】:iPhone UITableView trigger a parent method?iPhone UITableView 触发父方法?
【发布时间】:2010-11-26 13:37:02
【问题描述】:

好的,所以我正在开发一个带有首选项部分的 iPhone 应用程序,其中有一个基本的 TableView,它有一个部分和几行自定义单元格来保存名称和值标签。点击一行会弹出另一个视图,允许用户从列表中选择(另一个 TableView),然后选择一个项目。

所有这些 TableView 都是以编程方式完成的。基本 TableView 有一个属性,它为每个“从列表中选择”视图保存一个控制器实例。每个“从列表中选择”视图都有一个名为chosenValue 的属性,该属性具有当前选定的选项。我已经让 UI 来处理 didSelectRowAtIndexPath 以更新 chosenValue 属性,然后“pop”视图(返回到主 TableView)。但是,即使主tableview的 cellForRowAtIndexPath方法引用 chosenValue属性中保存的子视图的属性,但选择项目时,视图不会更新。简而言之,子视图“弹出”并卸载后如何在父对象上触发reloadData

【问题讨论】:

    标签: iphone


    【解决方案1】:

    例如,您可以使用通知或委托来实现这一点。

    使用通知,您的第一个视图控制器必须注册这样的通知:

    …
    
    [[NSNotificationCenter defaultCenter] addObserver:self  
                                             selector:@selector(methodToBeCalled:)  
                                                 name:@"myNotification"  
                                               object:nil]; 
    
    …
    
    - (void)methodToBeCalled:(NSNotification *)notification { 
        [self.tableView reloadData];
        // do something else
    }
    

    然后您可以像这样在第二个视图控制器中发出通知:

    [[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object:nil];
    

    使用委托,您可以在第二个视图上实现委托的属性,在推送第二个视图控制器之前将其设置为 self,并在需要时调用委托上的方法。

    【讨论】:

    • 好极了;使用通知系统最适合我,因为我有很多子视图和一个父视图,我宁愿不让父视图成为所有子视图的代表;为所有孩子定义一个通知是最简单的。
    【解决方案2】:

    您应该为此定义一个委托。 在子 TableView 中定义一个协议:

    @protocol ChildViewControllerDelegate
    - (void) somethingUpdated;
    @end
    

    还为实现此协议的委托定义一个属性:

    id <ChildViewControllerDelegate> delegate;
    

    然后在Parent中你需要做的就是定义一个方法somethingUpdated,将自己(父)分配给Child中的一个委托属性,当你需要更新它时在Child视图中调用这个方法。根据您要完成的任务,在 Parent 中的 somethingUpdated 的实现可能会有所不同。

    【讨论】:

      【解决方案3】:

      flohei 非常感谢您发布此信息!我让它与 NSNotificationCenter 一起工作!我现在有一个子视图在父视图中调用方法!惊人的。 @sha我也尝试了您的协议​​方式,但无法弄清楚。也许一个更详细的描述会帮助像我这样的菜鸟。我一直在阅读您的协议方式更好,因为我猜代码更少?所以我会努力继续学习它。谢谢你们!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 2019-07-19
        • 1970-01-01
        • 2018-10-27
        • 1970-01-01
        相关资源
        最近更新 更多