UITableViewCell单元格未显示

时间:2011-06-21 14:15:08

标签: iphone cocoa-touch uitableview

当您滑动tableview并且正在隐藏或删除单元格时,tableviewcell的UITableView中是否有任何方法。我有这段代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    int curIndex = 0;

    for (int i = 0; i < [dataHolder.dateArray count]; i++)
    {
        if ([[dataHolder.dateArray objectAtIndex:i] isEqual:[dataHolder.allDates objectAtIndex:[indexPath section]]])
        {
            if ([self indexHasContains:i] == NO)
            {
                curIndex = i;
                [indexHasChossen addObject:[NSString stringWithFormat:@"%i", i]];
                break;
            }
        }
    }

    cell.selectionStyle = UITableViewCellSelectionStyleGray;
    cell.textLabel.text = [NSString stringWithFormat:@"%@, %@", [dataHolder.courseArray objectAtIndex:curIndex], [dataHolder.placeArray objectAtIndex:curIndex]];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", [dataHolder.timeArray objectAtIndex:curIndex]];
    cell.selectionStyle = UITableViewCellSelectionStyleGray;
    cell.textLabel.textColor = [UIColor blackColor];
    cell.detailTextLabel.textColor = [UIColor whiteColor];

    return cell;
}

我还想要一个在隐藏/删除单元格时从indexHasChossen数组中删除的方法。我查看了苹果dokumentation,还没有找到任何东西。有人知道这样做吗?

3 个答案:

答案 0 :(得分:0)

虽然没有“隐藏”tableViewCells的标准概念,但用户删除的单元格在tableView中报告:commitEditingStyle:forRowAtIndexPath:

但是我还要补充一点,你似乎在跟踪cellForRowAtIndexPath中的“hasChosen”。此方法仅表示单元格即将出现在屏幕上,而不是已被选中。使用tableView调用委托时出现“选择”:didSelectRowAtIndexPath:

编辑:啊,也许是“隐藏”,你的意思是它已经离屏了。不,我不相信有这么一个电话,(虽然你可以作弊,看看你得到的任何出列的细胞,因为那些细胞以前在屏幕上并且现在可用)。

答案 1 :(得分:0)

如果要隐藏或删除单元格,tableView:cellForRowAtIndexPath:如何无关紧要。表视图仅在知道单元格存在时才调用此方法。这取决于您在方法numberOfSectionsInTableView:tableView:numberOfRowsInSection:方法中返回的内容。大多数情况下,前者返回1,所以如果你想要消除整个部分而不是你应该使用某种标记,例如sectionHidden,它是一个布尔值,表示是否隐藏了部分。 / p>

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    if ( sectionHidden ) 
        return 0;
    else
        return 1;
}

以及您想要启动删除操作的任何地方执行类似的操作,

sectionHidden = YES;
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0]
              withRowAnimation:UITableViewRowAnimationFade];

并将其重新打开,执行sectionHidden = NO并致电reloadSections:withRowAnimation:

同样适用于行,您必须更改tableView:numberOfRowsInSection:方法以反映您已删除行或隐藏行。这次您要使用reloadRowsAtIndexPaths:withRowAnimation:代替reloadSections:withRowAnimation:方法。

答案 2 :(得分:0)

从uitableview删除单元格很简单。我建议您查看Apple开发人员文档中的iPhoneCoreDataRecipes项目。

您必须向UITableViewDelegate添加一个名为commitEditingStyle的函数,并添加编辑按钮(UITableViewController中的self.editButtonItem)以允许编辑模式。

// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
     if (editingStyle == UITableViewCellEditingStyleDelete) {
    // Delete the object for the given index path
    }
}