我将
UITextField
设置为UITableViewCell
。根据数组计数加载 UITableView
。所有文本字段都是可编辑的。但是,我希望当我编辑 UITextField
时,UITextField
数据应存储到预定义的 NSString
中。对于每个 IndexPath.row 的文本字段都是不同的字符串。
附上我用来生成的代码
NSMutableArray
...
[arrProfile removeAllObjects];
arrProfile = [[NSMutableArray alloc] initWithObjects:
@{@"title": @"CUSTOMER NAME", @"details": strFName},
@{@"title": @"EMAIL ID", @"details": strEmail},
@{@"title": @"MOBILE NO.", @"details": strContact},
@{@"title": @"STATE", @"details": strStateName},
@{@"title": @"CITY", @"details": @""},
nil];
[_tblProfile reloadData];
现在附上 cellForRowAtIndexPath 中使用的代码...
static NSString *cellIdentifier = @"cellProfile";
NSDictionary *dictProfile = [arrProfile objectAtIndex:indexPath.row];
ProfileTableViewCell *cell = (ProfileTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
cell.lblTitle.text = [dictProfile objectForKey:@"title"];
cell.txtDetails.text = [dictProfile objectForKey:@"details"];
cell.txtDetails.delegate = self;
[self textFieldShouldReturn:cell.txtDetails];
[self textFieldShouldBeginEditing:cell.txtDetails];
return cell;
如果我正确理解您的问题,您想要构建一个动态表单,其中许多文本字段将根据您提供的数组而变化。您试图通过获取表视图并按每行加载所有文本字段来实现此目的。现在的问题是如何获取每个文本字段中输入的值。如果这是您的问题,这里就是如何做到这一点。
您可以通过使用文本字段标签来完成此操作。您没听错!。在表视图单元格方法中,为此目的为每个文本字段提供唯一标记(您可以使用indexpath.row)。在此分配代表。文本字段委托方法将被触发。现在,再次根据标签从文本字段委托方法获取文本字段的输入作为字符串并存储。
注:
[self textFieldShouldReturn:cell.txtDetails];
[self textFieldShouldBeginEditing:cell.txtDetails];
不需要从 tableview cellForRowAtIndexPath 调用的方法。如果您分配文本字段委托,它会处理它。
cell.txtDetails.delegate = self;
cell.txtDetails.tag = indexPath.row;
[cell.txtDetails addTarget:self action:@selector(textFieldDidEndEditing:) forControlEvents:UIControlEventTouchUpInside];
-(void)textFieldDidEndEditing:(UITextField *)textField {
if (textField.tag == 0) {
strFName = textField.text;
} else if (textField.tag == 2) {
strContact = textField.text;
}
[self loadTheMainArray];
}
选项1:
这适合您的实施 创建单元格行 (
txtDetails.tag
) 时将单元格索引分配给 cellForRowAtIndexPath
。
这将帮助您识别文本字段行
txtDetails.tag = indexPath.row
实现 UITextField 委托
textFieldDidEndEditing
或 shouldChangeCharactersIn
至
和行索引
arrProfile[textField.tag] = "新值"
选项2:
定义获取单元格文本更新的协议
protocol MYCellDelegate: class {
textFieldDidChange(row: Int, string: String)
}
class MyCell: UITableViewCell {
weak var delegate: MYCellDelegate?
var row: Int
}
在您的 cellForRowAtIndexPath 中执行以下操作
cell.delegate = self
cell.row = indexPath.row
在单元格中实现 UITextFieldDelegate (
textFieldDidEndEditing
或 shouldChangeCharactersIn
)
并使用适当的值调用
textFieldDidChange(row: Int, string: String)
不要忘记从
cellForRowAtIndexPath
中删除以下行
[self textFieldShouldReturn:cell.txtDetails];
[self textFieldShouldBeginEditing:cell.txtDetails];
您可以尝试使用块功能添加到单元格
cell.m_textChangeBlock = ^(NSString *text) {
if(indexPath.row){
weakSelf.m_models[indexPath.section].rtext = text;
}else{
weakSelf.m_models[indexPath.section].ltext = text;
}
};