0

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

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

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

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

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

效果很好。

这是从 UITableViewController 继承的 BGTableViewDelegateMother 的代码(从 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 时,我至少应该 reloadData

-(void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];//never called
    [self.delegate.tvDelegated reloadData];
}

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

viewDidLoad 也永远不会被调用。

4

1 回答 1

0

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

于 2013-07-16T08:27:55.957 回答