UITableView不会出现

时间:2014-08-17 23:25:57

标签: ios objective-c uitableview

我的应用程序中有一个非常奇怪的情况,我无法解释或找到错误。 我有一个带有tableView的UIViewController。 在表格视图中,我有3个原型单元格,我也有2个部分,如下所示:

第一部分:第0行(单元格ID:episodeScrollersCell) 第二部分:第0行(单元格ID:addCommentsCell)               :第1行(单元格ID:commentCell)

协议中所需的方法如下所列。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSInteger rowNum;
    if(section == 0){
        rowNum = 1;
    }else{
        rowNum = 1; // here is the problem. If i change the number of row to above 1
    }
    return rowNum;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier;
    if(indexPath.section == 0){
        cellIdentifier = episodeScrollersCell;
    }else if (indexPath.section == 1 && indexPath.row == 0){
        cellIdentifier = addCommentsCell;
    }else{
        cellIdentifier = commentCell;
    }
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    return cell;
}

现在问题出现在我希望在第二部分中有2行或更多行(即在一个部分中有2个原型单元)时,视图控制器将不会显示。我已经记录了cellForRowAtIndexPath:方法,看看是否有单元格被加载了。

有什么建议吗? 谢谢,

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试将可重复使用的单元格出列,而之前可能没有创建单元格。但是,如果没有创建/分配单元格,则出列将返回nil值。这告诉程序对于给定的indexPath,没有要显示的单元格。

因此,如果从dequeue函数中获取nil值,则表将尝试使用给定的单元标识符创建新单元格。所以,我建议你做类似以下的事情:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier;
    if(indexPath.section == 0){
        cellIdentifier = episodeScrollersCell;
    }else if (indexPath.section == 1 && indexPath.row == 0){
        cellIdentifier = addCommentsCell;
    }else{
        cellIdentifier = commentCell;
    }
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if(!cell){
        if(indexPath.section == 0){
            //Initialise a new cell here, through a NIB or code
            //For eg. cell = [[UITableViewCell alloc] initWithStyle: ...];
        }
        //Do the specific initialisation for each type of cell you need here
    }
    return cell;
}

这样,当dequeue函数返回NIL值时,程序会自动创建一个适合该位置的新单元格。

希望这有帮助。