【问题标题】:UITextfield inside dynamic/dequeuable UITableviewcells动态/可出队的 UITableviewcells 内的 UITextfield
【发布时间】: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;
  }
 }

【问题讨论】:

    标签: ios uitableview ios8 uitextfield


    【解决方案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];
    

    【讨论】:

    • 我已经完成了你所描述的所有事情,还有什么我必须做的吗?因为应用程序在启动时甚至没有加载并崩溃。
    猜你喜欢
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    相关资源
    最近更新 更多