如何在cellForRowAtIndexPath中添加额外的单元格?

时间:2012-11-09 12:47:28

标签: ios uitableview

例如,我有3篇文章,当我展示文章时,我想在第一篇文章之前再显示一个单元格(总共4篇)。

我需要显示第一篇不在数组中的文章,然后显示数组中的文章。

更新

enter image description here

我接下来试过了:

- (NSInteger)tableView:(
UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return ([arr count] + 1);

}

但我的应用程序有时会崩溃,我看到NSLOG然后该应用程序在调用[tableView reloadData]之前进入cellForRowAtIndexPath。

4 个答案:

答案 0 :(得分:2)

这是你不应该做的事情。

好吧,您可以通过返回一个视图(来自-tableView:cellForRowAtIndexPath :)来欺骗框架,该视图将包含2个子视图:您的“第一篇文章”单元格和原始的第一个单元格;不要忘记修改-tableView:heightForCellAtIndexPath :(否则你的视图会被删除)。

但总的来说,你应该改变表视图​​后面的数据模型以显示4个单元 - 这只是一种更有效的方法。

答案 1 :(得分:1)

你可以这样做:

使用此方法返回其他行:

// Each row array object contains the members for that section
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
     return [YouArray count]+1; 
}

最后检查此添加的行:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Create a cell if one is not already available
    UITableViewCell *cell = [self.mContactsTable dequeueReusableCellWithIdentifier:@"any-cell"];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"any-cell"] autorelease];
         }

     //Identify the added row
     if(indexpath.row==0)
     {
        NSLog(@"This is first row");
     } 
     else{
      // Write your existing code

     }

}

答案 2 :(得分:1)

您需要使用insertObject

在数组中添加额外的值
[arr insertObject:[NSNull null] atIndex:0];

并实施以下方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [arr count];
}

- (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([arr onjectAtIndex:indexPath.row] == [NSNull null])
    {
      // 1st cell extra cell do your stuff
    }
    return cell;
}

答案 3 :(得分:0)

你把所有文章都放在一个数组中吗?您也应该将新文章添加到数组中。数组是您的数据源。我认为如果您希望将新文章作为第一个元素插入到顶部单元格中,则需要将其作为第一个元素插入。一旦更新了数组,就应该调用[mytableView reloadData]来触发所有要调用的数据源方法并重新加载表的数据。