动态/可出队的 UITableviewcells 内的 UITextfield
Posted
技术标签:
【中文标题】动态/可出队的 UITableviewcells 内的 UITextfield【英文标题】:UITextfield inside dynamic/dequeuable UITableviewcells 【发布时间】:2014-11-27 21:17:56 【问题描述】:我有这个 tableview 有足够的单元格需要滚动,每个单元格都是一个包含标签和 UITextField 的自定义单元格。我正在尝试this 解决方案
当我在文本字段中输入文本并滚动表格视图以查看其他单元格时,我之前编写的文本消失了,留下一个空白文本字段。
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;
【问题讨论】:
【参考方案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];
【讨论】:
我已经完成了你所描述的所有事情,还有什么我必须做的吗?因为应用程序在启动时甚至没有加载并崩溃。以上是关于动态/可出队的 UITableviewcells 内的 UITextfield的主要内容,如果未能解决你的问题,请参考以下文章