我有一个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];
}
我认为我的问题可能是某种细胞再利用问题。 但是这段代码没有任何区别。
所以textFieldOne
和textFieldTwo
都有完全相同的内存地址,我无法弄清楚原因。
在cellForRowAtIndexPath
内部,我创建了这样的单元格:
BBTextFieldLabelTableViewCell *textFieldCell = [tableView dequeueReusableCellWithIdentifier:textFieldCellidentifier];
答案 0 :(得分:1)
在prepareForReuse中,您正在创建一个新的文本字段,但既不删除旧文本字段也不添加新文本字段。
我建议使用prepareForReuse重置当前文本字段而不是创建新字段
更仔细地阅读您的问题:textfield one和two都具有相同的值这一事实表明,在对configureTextFieldCell的两次调用之间没有调用重用准备。没有更多代码,很难理解为什么