当我们使用 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找不到委托