UITableViewController设置委托和数据源

时间:2010-12-31 08:43:46

标签: iphone objective-c ios4 uitableview

我对UITableViewController有点困惑......据我所知,它们通常是UITableView的委托和数据源(虽然可以使它们不同)。

但是在某些情况下,比如在Interface Builder中的UITabBarViewController中嵌入UITableViewController时,我们会在IB中启动表视图控制器。因此,根据我的理解,正在调用默认初始化程序。

但在这种情况下,我有这段代码:

@interface Settings : UITableViewController {

}

在IB中,我看到UITableView的委托和数据源已连接到此类。我的问题是,为什么我们不需要明确地说它遵循:

@interface Settings : UITableViewController <UITableViewDelegate, UITableViewDataSource>     
{
}

在.m文件中:

- (void)viewDidLoad {
    [super viewDidLoad];
    [tableView setDelegate:self];
    [tableView setDataSource:self];
}

我确实偶然发现了一些情况,我必须明确地对上面几次进行编码才能使某些东西发挥作用。虽然对我来说仍然是一个谜,但为什么需要......

2 个答案:

答案 0 :(得分:3)

在超类后面的尖括号中,您可以定义您的类将要实现的协议。协议包含(如Java中的接口)方法声明,但没有实现。一些方法被标记为必需,一些方法是可选的。即如果你决定实施一个协议,至少你必须实现所需的协议。

但是,您无需表明您将实施协议。它足以实现所需的,您的代表将工作正常。不过,这是一个好主意。 Xcode和编译器会警告你,如果两者都检测到你的实现中的错误(比如忘记了一个必需的方法,使用了错误的方法签名等)。

答案 1 :(得分:-5)

使用

tableView.delegate =自我;  tableView.dataSource =自我;

而不是

[tableView setDelegate:self];
[tableView setDataSource:self];