tableView numberOfRowsInSection在iOS4上调用tableView viewForHeaderInSection
我收到了一个包含很多依赖项的大应用程序。对于这种情况,我实现了一个名为RootTableViewController
的类来处理所有必须在每次需要表视图控制器时执行的操作。tableView numberOfRowsInSection在iOS4上调用tableView viewForHeaderInSection
现在我发现了一个无限循环,我不知道如何解决它。我在RootTableViewController
下面的代码:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
NSString *sectionTitle = [self tableView:tableView titleForHeaderInSection:section];
int numbersOfRowInSection = [self.tableView numberOfRowsInSection:section];
if (numbersOfRowInSection > 0)
{
// ...
}
else
{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 28.0f)];
return view;
}
}
这完美的作品在iOS 5和iOS 6,但在iOS4的它会导致死循环,因为[tableView numberOfRowsInSection]
呼吁[tableView viewForHeaderInSection]
。我怎样才能解决这个使用表视图API?它没有解决方案,我与[ count]
的内部数据阵列工作,因为我有很多表视图控制器扩展此RootTableViewController
与不同的数据源。
如果你想获得行的数据源的段数,而无需访问内部数据数组,你可以查询dataSource
委托它,像
int numbersOfRowInSection = [self.tableView.dataSource tableView:self.tableView numberOfRowsInSection:section];
(未编译器检查)
这是根本不好的风格。你应该继承或推广相关的代理方法,但你应该不要致电UITableView.numberofRowsInSection:
但是,你当然已经实施了tableView:numberOfRowsInSection
。将其所有功能移至新方法myNumberOfRowsInSection:
在那里也是这样。它主要是您当前的numberOfRowsInSection
的副本。 然后在你这里的代码sniplet调用[self myNumberOfRowsInSection:...];
并在tableView:numberOfRowsInSection:section
只是做:
return [self myNumberOfRowsInSection:section];
应用相同的模式,你可能想叫自己所有的委托方法。将其所有业务逻辑转移到您自己的方法中,然后只从委托方法和您自己的代码中调用您自己的方法。
这将工作。在大多数情况下,self.talbeView.dataSource和self.tableView.delegate将指向自己:) – 2013-03-19 19:08:30