我有这个tableview有足够的单元格需要滚动,每个单元格是一个包含标签和UITextField的自定义单元格。我正在尝试this解决方案
当我在文本字段中输入文本并滚动tableview以查看其他单元格时,之前写入的文本消失,留下空白文本字段。
This是我的问题
我的cellForRowAtIndexPath代码是:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Mycell";
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
cell.myLabel.text = [labelarray objectAtIndex:indexPath.row];
cell.myTextbox.tag = indexPath.row;
cell.myTextbox.text = stringVariable;
return cell;
}
stringVariable在.h
中声明 interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate>{
NSMutableArray *labelarray ;
NSString *stringVariable;
__weak IBOutlet UITableView *myTableview;
}
我在这里初步确定了它:
-(void)textFieldDidEndEditing:(UITextField *)textField{
MyTableViewCell *cell;
stringVariable = [[NSString alloc]init];
if (textField == cell.myTextbox) {
self->stringVariable = cell.myTextbox.text;
}
}
答案 0 :(得分:1)
问题是,当单元格离开屏幕时,它们会被破坏,并且会在它们再次出现时重新创建。
要保留输入的数据,您需要使用UITextField
委托方法textFieldDidEndEditing:
存储它。
你在那种方法中所做的是错误的。首先,你不是你的单元格对象没有指向任何地方,它总是nil
。其次,你不能有一个变量(stringVariable
)来存储所有数据,你需要一个数组,所以每个元素都对应一个文本字段。
添加属性:
@property (strong, nonatomic) NSMutableArray *textFieldData;
然后分配它:
- (void)viewDidLoad {
// ...
self.textFieldData = [[NSMutableArray alloc] initWithCapacity:<number of rows>];
// ...
}
然后是代表:
- (void)textFieldDidEndEditing:(UITextField *)textField{
self.textFieldData[[textField tag]] = textField.text;
}
对于您拥有的每个UITextField
,请不要忘记将控制器设置为代表。
最后,在重新创建单元格时,请使用:
cell.myTextbox = self.textFieldData[indexPath.row];