1

在 UITableView 上滚动时,我的单元格文本字段值出现问题。当我向下滚动并隐藏自定义单元格时,会删除 textField 的值。dequeueReusableCellWithIdentifier 方法不起作用。我有这个:

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

 static NSString *SectionsTableIdentifier = @"MyCustomCell";

 MyCustomCell *cell = (MyCustomCell *) [tableView dequeueReusableCellWithIdentifier:SectionsTableIdentifier];

    if (cell == nil) {
        NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"MyCustomCell" owner:self options:nil];
        cell = [objects objectAtIndex:0];
    }

 cell.labelCustomAttribute.text= @"Attribute Name";
 cell.textFieldCustomAttribute.delegate = self;

 return cell;


}
4

2 回答 2

1

我发现在 viewDidLoad 方法中使用 tableView 注册自定义单元格更容易,然后只需使用 dequeueReusableCellWithIdentifier。如果您注册了单元格,出队方法将自动选择一个可重复使用的单元格或分配一个新的自定义单元格(如果没有可用的)。

例子:

-(void)viewDidLoad
{
    [super viewDidLoad];

    // Get a point to the customized table view cell for MyCustomCell
    UINib *myCustomCellNib = [UINib nibWithNibName:@"MyCustomCell" bundle:nil];
    // Register the MyCustomCell with tableview
    [[self tableView] registerNib:myCustomCellNib forCellReuseIdentifier:@"MyCustomCell"];
}

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

    static NSString *SectionsTableIdentifier = @"MyCustomCell";
    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:SectionsTableIdentifier];

    cell.labelCustomAttribute.text= @"Attribute Name";
    cell.textFieldCustomAttribute.delegate = self;

    return cell;

}
于 2013-03-28T21:46:45.757 回答
0

通常重用标识符是在 UITableViewCell 的initWithStyle:reuseIdentifier:方法中分配的,您没有使用该方法,因为您正在从 Nib 加载视图。

之后不能设置此属性,因为它是只读的。

也许您可以尝试使用标准实例化单元格initWithStyle:reuseIdentifier:并将 Nib 中的视图添加为单元格 ContentView 的子视图...

现在,您的情况发生的是,每次表格视图需要显示一个新单元格时,您都会创建一个新单元格。显然,这是行不通的。实际上,如果您要重用单元格,您还必须将文本字段的内容存储在某个地方(最好是在您的数据源中),并在重用单元格时将其放置。如果不存储它,当单元格将被重用时,它将包含显示它的上一行的数据。

于 2013-02-04T16:41:50.797 回答