UITextfield内部动态/可排队的UITableviewcells

时间:2014-11-27 21:17:56

标签: ios uitableview ios8 uitextfield

我有这个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;
  }
 }

1 个答案:

答案 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];