0

我有一个带有自定义 UITableViewCell 的 UITableView。

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

//create the cell
MyCell *cell = (MyCell*)[tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
cell.label.text = ..
cell.label2.text = ..
cell.label3.text = ..

一切正常,我的所有数据都正确加载,等等。

现在,我在这个视图控制器上有一个按钮,可以打开另一个视图,用户可以在其中选择要显示的标签。因此,例如,显示标签 1 和 3,但不显示 2... 然后,当Done单击时,我希望更新 tableView 以反映新选项,但由于单元格加载了reuseCellId,因此没有显示任何更改. 如何强制细胞重新创建?

4

3 回答 3

0

I solved this issue by just destroying the tableview, and recreating it every time.

于 2012-07-27T19:12:08.210 回答
0

这不是一个好方法
当您想要刷新单元格时,您可以通过使用不同的标识符来做到这一点

我不确定是否还有其他更好的方法可以做到这一点。

于 2012-07-27T15:31:49.270 回答
0

我认为您可以做的最好的事情是将单元格配置存储在某种结构中(此处可以显示带有标签索引的集合)并使用按钮更改此结构并重新加载表格视图。然后,在您的 tableView:cellForRowAtIndexPath: 方法中,您应该检查该配置结构以了解哪些按钮应该可见。

此代码可能会有所帮助:

@interface MyViewController : UIViewController
{
    ...
    NSMutableSet *_labelsToShow;
}

...
@property (nonatomic, retain) NSMutableSet labelsToShow

@end


@implementation MyViewController
@synthesize labelsToShow = _labelsToShow;

- (void)dealloc
{
    [_labelsToShow release];
    ...

}


//you may know which button has to add/remove each label, so this needs to be fixed with your logic
- (IBAction)myButtonAction:(id)sender
{
    if (hasToShowLabel)
    {
        [self.labelsToShow addObject:[NSNumber numberWithInteger:labelIdentifier]];
    } else
    {
        [self.labelsToShow removeObject:[NSNumber numberWithInteger:labelIdentifier]];
    }
}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"myCell";
    MyCustomCell *cell = (MyCustomCell *)[tableView dequeReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil)
    {
        cell = [[[MyCustomCell alloc] initWithStyle:UITableViewCellStyleDefault] autorelease];
    }

    cell.label0.hidden = (![self.labelsToShow containsObject:[NSNumber numberWithInteger:0]]);
    cell.label1.hidden = (![self.labelsToShow containsObject:[NSNumber numberWithInteger:1]]);
    cell.label2.hidden = (![self.labelsToShow containsObject:[NSNumber numberWithInteger:2]]);
    ...

    return cell;
}


@end

祝你好运!

于 2012-07-27T15:44:30.390 回答