如何将 UITextField 的值转换为 UITableViewCell 中的 NSString?
How to get UITextField's value into a NSString which is in UITableViewCell?
我把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;
如果我对您的问题的理解正确,您希望构建一个动态表单,其中许多文本字段会根据您提供的数组而变化。您正试图通过采用 table 视图并按每行加载所有文本字段来实现此目的。现在的问题是如何获取每个文本字段中输入的值。如果这是你的问题,这里是如何做的事情。
您可以通过为文本字段使用 标签来完成此操作。您没有听错!在 table 查看单元格方法中,为每个文本字段提供唯一标签(您可以使用 indexpath.row)用于该目的。在这里分配代表。将触发文本字段委托方法。现在,再次基于标签的文本字段委托方法从文本字段获取输入作为字符串并存储。
注:
[self textFieldShouldReturn:cell.txtDetails];
[self textFieldShouldBeginEditing:cell.txtDetails];
不需要从 table 查看 cellForRowAtIndexPath 调用的方法。如果您分配文本字段委托,它会处理它。
选项 1:
适合您的实施
在创建单元格行 (cellForRowAtIndexPath
) 时将单元格索引分配给 txtDetails.tag
。
这将帮助您识别文本字段行
txtDetails.tag = indexPath.row
实施 UITextField 委托 textFieldDidEndEditing
或 shouldChangeCharactersIn
到
- 获取字段值。
和行索引
arrProfile[textField.tag] = "new value"
选项 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.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.you 可以尝试使用块函数添加到单元格,但现在遵循代码块:
cell.m_textChangeBlock = ^(NSString *text) {
if(indexPath.row){
weakSelf.m_models[indexPath.section].rtext = text;
}else{
weakSelf.m_models[indexPath.section].ltext = text;
}
};
我把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;
如果我对您的问题的理解正确,您希望构建一个动态表单,其中许多文本字段会根据您提供的数组而变化。您正试图通过采用 table 视图并按每行加载所有文本字段来实现此目的。现在的问题是如何获取每个文本字段中输入的值。如果这是你的问题,这里是如何做的事情。
您可以通过为文本字段使用 标签来完成此操作。您没有听错!在 table 查看单元格方法中,为每个文本字段提供唯一标签(您可以使用 indexpath.row)用于该目的。在这里分配代表。将触发文本字段委托方法。现在,再次基于标签的文本字段委托方法从文本字段获取输入作为字符串并存储。
注:
[self textFieldShouldReturn:cell.txtDetails];
[self textFieldShouldBeginEditing:cell.txtDetails];
不需要从 table 查看 cellForRowAtIndexPath 调用的方法。如果您分配文本字段委托,它会处理它。
选项 1:
适合您的实施
在创建单元格行 (cellForRowAtIndexPath
) 时将单元格索引分配给 txtDetails.tag
。
这将帮助您识别文本字段行
txtDetails.tag = indexPath.row
实施 UITextField 委托 textFieldDidEndEditing
或 shouldChangeCharactersIn
到
- 获取字段值。
和行索引
arrProfile[textField.tag] = "new value"
选项 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.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.you 可以尝试使用块函数添加到单元格,但现在遵循代码块:
cell.m_textChangeBlock = ^(NSString *text) {
if(indexPath.row){
weakSelf.m_models[indexPath.section].rtext = text;
}else{
weakSelf.m_models[indexPath.section].ltext = text;
}
};