UITextField在UITableViewCell中 - 重用问题

时间:2015-07-21 06:55:53

标签: objective-c uitableview uitextfield

我有一个UITableView,其中包含一个UITableViewCell的自定义UITextField

每个UITextField都会显示viewModel中的一些文字,而我正在使用Reactive-Cocoa将文本字段绑定到viewModel

当我的UITableView第一次加载时,一切正常。但是,当我为下一个页面重新加载UiTableView时,#39; - 重新加载的第一个UiTextField(第二页)tableView与第一个页面中的第一个UITextField具有完全相同的内存地址' - 单元格与其他UI元素不正确 - 只是文本字段是同一个实例。

所以,我在我的VC中声明UITextField是这样的:

@property (weak, nonatomic)  UITextField *textFieldOne; //One the first 'page'
@property (weak, nonatomic)  UITextField *textFieldTwo; //After reload on second 'page' 

然后在cellForRowAtIndexPath

调用的方法中进行设置
 -(void)configureTextFieldCell:(BBTextFieldLabelTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
    {
        cell.textField.delegate = self;

        if (self.selectedSegmentIndex == SegmentedControlStep1){
            if (indexPath.section == 0){

                            cell.label.text = @"Name";
                            self.textFieldOne = cell.textField;
                    }
                /* Code for setting up other cells / textfields ommited -
                but the same syntax as above with checks for indexPath */
                }

        if (self.selectedSegmentIndex == SegmentedControlStep2){

                cell.label.text = @"Username";
                self.textFieldTwo = cell.textField;

            [self bindUsernameAndPasswordToViewModel]; /* Binding for this textfield as its nil when VC loads for the first time,
                                                            so this is the first chance I get to bind it on second page */
        }
    }

BBTextFieldLabelTableViewCell内,UITextField的声明如下:

@property (strong, nonatomic) IBOutlet UITextField *textField;

我也试过在单元格的实现文件中执行此操作:

-(void)prepareForReuse
{
    self.textField = [[UITextField alloc] init];
}

我认为我的问题可能是某种细胞再利用问题。 但是这段代码没有任何区别。

所以textFieldOnetextFieldTwo都有完全相同的内存地址,我无法弄清楚原因。

cellForRowAtIndexPath内部,我创建了这样的单元格:

BBTextFieldLabelTableViewCell *textFieldCell = [tableView dequeueReusableCellWithIdentifier:textFieldCellidentifier];

1 个答案:

答案 0 :(得分:1)

在prepareForReuse中,您正在创建一个新的文本字段,但既不删除旧文本字段也不添加新文本字段。

我建议使用prepareForReuse重置当前文本字段而不是创建新字段

更仔细地阅读您的问题:textfield one和two都具有相同的值这一事实表明,在对configureTextFieldCell的两次调用之间没有调用重用准备。没有更多代码,很难理解为什么