一个View Controller中有两个UITableView

时间:2015-02-11 14:33:23

标签: ios objective-c

所以我在这个问题上找到了很多问题和答案,但我似乎仍然无法解决我的问题。 我有这个:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    if(tableView == self.moduleTableView){
        UITableViewCell *cell = [_moduleTableView dequeueReusableCellWithIdentifier:@"TableIDCell"];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"TableIDCell"];
        }

这一切都很好,适用于moduleTableView,我有代码填充单个单元格。 但是,我后来有一个if(tableView == theOtherTableview)并且代码永远不会执行,(使用了断点来检查)。因此,第二个tableview永远不会加载和填充。 我已经为numberOfRows方法中的相同if语句做了我声明:

  self.tblEvents.delegate = self;
  self.tblEvents.dataSource = self;
  self.otherTblEvents.delegate = self;
  self.otherTblEvents.dataSource = self;

它仍然无法正常工作,我错过了什么吗?我认为我已将实施正确地与故事板相关联,我只是无法在cellForRowAtIndexPath:

时重新加载(tableView == OtherTableView)方法

由于

2 个答案:

答案 0 :(得分:1)

我和你有完全相同的问题。 我发现最干净的解决方案是制作2个数据源类。这样,视图控制器中的代码就会减少很多。 基本上是这样的

   DatasourceTblEvents *ds1 = [DatasourceTblEvents new];
   DatasourceotherTblEvents *ds2 = [DatasourceotherTblEvents new];

   self.tblEvents.dataSource = ds1;
   self.otherTblEvents.dataSource = ds2;

这大大减少了数据源协议方法中if语句的数量。通过这种方式,您可以像在一个表视图中一样在每个数据源类中实现数据源方法。

希望这有帮助。

答案 1 :(得分:0)

检查- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section方法是否返回零值(空数组计数),仅当numberOfRowsInSection方法返回非零值时才会调用Cell for Row Method。

numberOfRowsInSection应返回非零值