困惑于UITableView numberOfRowsInSection语法

时间:2011-04-11 20:21:17

标签: iphone xcode

我有一个标签视图,可以为每个标签

加载表格视图

第一个标签界面声明UITableView * tableView; 第二个选项卡界面声明UITableView * favTableView;

当声明第二个表的行数时,这有效:

- (NSInteger)tableView:(UITableView *)favTableView numberOfRowsInSection:(NSInteger)section {
    return [favList count];
}

但如果我把它改为:

- (NSInteger)favTableView:(UITableView *)favTableView numberOfRowsInSection:(NSInteger)section {
    return [favList count];
}

当我尝试加载第二个标签时,应用程序崩溃了

我的错误是(a)不理解哪个是变量/保留字,(b)给每个表一个唯一的标识符,即favTableView,而不是重用tableView。

第二个表也没有标题栏

2 个答案:

答案 0 :(得分:5)

您必须实施的委托方法是

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

在这个方法原型中,tableView:(注意冒号)是一个你无法改变的固定名称。 tableView的第二个实例只是一个在方法中有意义的局部变量名。以下内容也是有效的:

-(NSInteger)tableView:(UITableView *)tv numberOfRowsInSection:(NSInteger)section

委托方法名称就是它们的名称。您无法决定是否希望委托方法名称成为其他名称,或者UITableView如何知道在需要来自其委托的信息时要调用哪些方法?

因此,对于您的表favTableView,如果您将实现上述委托方法的对象指定为favTableView的委托,那么在调用时,本地变量tv实际上与favTableView相同。 / p>

我可以看到你对此感到困惑的地方。 SDK使用'tableView'来处理很多事情:方法原型占位符名称,变量名称以及谁知道还有什么。归结为能够阅读和理解Objective-C方法签名。 :-)这有点奇怪,直到你习惯它。

答案 1 :(得分:0)

当您指出时,委托可能使用预先设置的方法名称。不应该重用tableView应该没有功能问题,因为你可能还是会重用favTableView。标题栏应该通过在自定义tableView中手动设置标题的属性来解决。如果您要查找标题,则必须设置高度和大小的属性。