动态/可出队的 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的主要内容,如果未能解决你的问题,请参考以下文章

防止 UITableViewCells 出队并重新加载

出队的 UICollectionViewCell 未刷新

出队的 UITableViewCell 在滚动之前布局不正确(使用自动布局)

原子出队的最简单方法?

如何防止出队的集合视图单元格相互重叠?

顺序队列总结