在开发中有一个需求,是在购物 app上确认订单前,每一个商品用户都可以填写一个备注,开发之初发现,当在textFidle中填写完备注后,如果商品过多超出一屏,已填写备注的产品划出屏幕外再划回屏幕内时,已填写的备注就会消失,是因为cell重新进入屏幕内时会调用cellForRowAtIndexPath方法,从而导致UITextField内容消失。解决的思路是:这无非就是数据源的问题,顺着这个思路,得到解决办法。
首先,创建一个可变数组noteArray,长度和商品数量相等,内容为空,并在cellForRowAtIndexPath中,将UITextField的text值设置为noteArray中对应的值,初始时一定为空。
cell.noteTextField.text= [self.noteArray[indexPath.row]description];
然后在cellForRowAtIndexPath方法中,将UITextField的tag值设置为indexPath.row并设置代理。
cell.noteTextField.delegate=self;
cell.noteTextField.tag= indexPath.row;
在代理方法中,取得UITextField的值,并根据tag值替换noteArray中的值。
-(void)textFieldDidEndEditing:(UITextField *)textField{
[self.noteArray replaceObjectAtIndex:textField.tag withObject:textField.text];
}
最后在刷新时,cell上的UITextField的值得以保存。