2

在我的应用程序中,我有一个 UITableView,我有两个不同的自定义 UITableViewCells。UITableView 最初加载了一种自定义 UITableViewCell。在我的 UITableView 中选择一个单元格时,我想更改使用另一种类型的自定义 UITableViewCell 选择的单元格。这可能吗?让我听听你得到了什么。

谢谢, NSNolan

#pragma mark - UITableView delegate methods

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

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{    
    if(indexPath.row == [self currentCellIndex]) {
        [self setCurrentCellIndex:-1];

        NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:@"NewCell" owner:self options:nil];

        OldCell *cell = (OldCell *)[tableView cellForRowAtIndexPath:indexPath];
        cell = [nibs objectAtIndex:0];
    }
    else {
        [self setCurrentCellIndex:indexPath.row];

        NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:@"NewCell" owner:self options:nil];

        NewCell *cell = (NewCell *)[tableView cellForRowAtIndexPath:indexPath];
        cell = [nibs objectAtIndex:0];
    }        
}

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

    OldCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {
        NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:@"OldCell" owner:self options:nil];
        cell = [nibs objectAtIndex:0];
    }

    return cell;
}
4

1 回答 1

6

在您的didSelectRow...方法中,您需要更新一个标志(存储在实例变量中),指示单元格的新“模式”。然后通过调用tableView reloadRowsAtIndexPaths:withRowAnimation:传入选定的 indexPath 来重新加载行。

在您的cellForRow...方法中,使用标志来确定用于行的两种类型的单元格中的哪一种。

于 2013-03-09T04:44:22.320 回答