iOS UITableView内容不可见

时间:2014-07-21 12:04:45

标签: ios objective-c uitableview

在VC中我有2个tableViews - 1个main和other在下拉菜单中添加。从下拉菜单TableView“ddTableView”,我在Storyboard中添加了5 cells作为原型单元格。每个cell都包含imageLabel。还为每个cell设置了标识符。还为每个cell的{​​{1}}设置了附件类型作为“披露指标”。

将mainTV的DataSource和Delegate设置为VC,并将ddTableView的委托设置为VC。在故事板中添加行时,我没有在ddTableView中为ddTableView设置任何数据源。我管理了我的委托方法: -

VC

它确实调用各自的委托方法。对于- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if (tableView == ddTableView) { // RETURNS NIL ??? UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; NSLog(@"CELL Identifier = %@", cell.reuseIdentifier); return cell; } else { } } -(void )tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (tableView == ddTableView) { UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; NSLog (@" CELL Clicked of - %@", cell.reuseIdentifier); } } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if (tableView == ddTableView) return 44; else return 60; } -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (tableView == ddTableView) return 5; else return [chatMsgsArr count]; } ,它将单元格返回为nil。为什么这样 ?在执行时,我没有看到表视图的任何内容 - 表是空白的。我也改变了图像和文本颜色的bg颜色,但是在执行时却看不到任何东西。

为什么这样?我可能在哪里出错?

2 个答案:

答案 0 :(得分:1)

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

   static NSString *CellIdentifier = @"cell";


  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;


}


   if (tableView == ddTableView) {

  NSLog(@"CELL Identifier = %d", indexpath.row);


 } else {

 NSLog(@"CELL Identifier = %@", [chatMsgsArr objectAtIndex:indexPath.row]);
 }
return cell;
}

答案 1 :(得分:1)

第一次调用cellForRowAtIndexPath时,必须分配单元格。如果未分配单元格,则会立即返回nil

首次进入cellForRowAtIndexPath时,您需要做的只是分配一次。之后,你可以像你一样重复使用它。

如果您打算使用默认tableViewCell,则您的方法应如下所示:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    NSString *cellIdentifier = @"your_cell_identifier_name";

    if (cell == nil)
    {
        UITableViewCell *cell = [UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }
    else
    {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
    }

    //write the code to populate your cell with data here

    //return the cell object
    return cell;
}

希望这有帮助! :)