当我们使用 UITableViewController 的子类处理表委托时,如何使 viewWillAppear 被调用?

Posted

技术标签:

【中文标题】当我们使用 UITableViewController 的子类处理表委托时,如何使 viewWillAppear 被调用?【英文标题】:How to make viewWillAppear to be called when we use a subclass of UITableViewController to handle table delegate? 【发布时间】:2013-07-16 07:09:47 【问题描述】:

我想让我的代码更加模块化和灵活。

因此,我没有将 tableViewDelegate 设置为 UIViewController,而是将 UITableViewController 的子类作为 tableView 数据源和委托。

基本上,原来的 UIViewController 为 UITableViewController 的子类提供了视图。

这样类似的表可以被多个 UIViewController 的子类使用。

在某些情况下,UIViewController 提供 tableView,我只是在运行时切换 tableView 委托。

效果很好。

这里是 BGTableViewDelegateMother 的代码,它继承自 UITableViewController(继承自 UIViewController。

@implementation BGTableViewDelegateMother

-(void) setDelegate:(id<BGTableViewDelegateMother>)delegate


    _delegate=delegate;

    self.view = self.delegate.tvDelegated; //So that viewWillAppear would work fine
    [self view]; //load the view view didload is not called either
    self.delegate.tvDelegated.delegate =self;
    self.delegate.tvDelegated.dataSource=self;

好的。 UITableViewController.view 用于一件事。现在它指向正确的 tableView,我希望 viewWillAppear 被调用。不是

我认为每次显示tableView时,我至少应该重新加载数据

-(void) viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];//never called
    [self.delegate.tvDelegated reloadData];

此代码从未调用过。即使视图确实会出现。为什么?

viewDidLoad 也永远不会被调用。

【问题讨论】:

【参考方案1】:

使表格视图控制器成为您的视图控制器的子视图控制器,同时它的视图已链接(并且它是数据源)并且可以在屏幕上。这告诉视图控制器层次结构表视图需要知道外观回调。

【讨论】:

以上是关于当我们使用 UITableViewController 的子类处理表委托时,如何使 viewWillAppear 被调用?的主要内容,如果未能解决你的问题,请参考以下文章

tableHeaderView中的UITextView找不到委托

viewController的生命周期

将 UITableView 实例化为弹出框时,UITableViewCell 的属性为零

当我们只能使用 NSObject 时,为啥还要使用 id?

当我们有 OkHttp 时为啥要使用 Retrofit

当我们使用它时,线程本地是啥? [复制]