我的应用程序中有一个非常奇怪的情况,我无法解释或找到错误。 我有一个带有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:方法,看看是否有单元格被加载了。
有什么建议吗? 谢谢,
答案 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
值时,程序会自动创建一个适合该位置的新单元格。
希望这有帮助。