从自定义 UITableView 获取 UItextFields 文本
Get UItextFields text from custom UITableView
我有一个带有 UITextField
的自定义 UITableViewCell
(链接到自定义单元格 class)。我正在尝试从我的 VC class.
访问 textField
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
menuCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
if ([indexpath row] == 2) {
menuCell.nameTextField.delegate = self;
}
return cell;
}
-(void) textFieldDidEndEditing:(UITextField*) textfield
{
}
如何从 textFieldDidEndEditing
获取 textFields
文本?
如果您询问如何从委托方法 textFieldDidEndEditing 中获取文本,那么您只需这样做:
-(void) textFieldDidEndEditing:(UITextField*) textfield
{
NSString *textFieldText = textfield.text;
}
但是,如果您有多个文本字段并且您想知道哪个文本字段正在调用委托,您可以标记您的文本字段:
[myTextField setTag:indexPath.row]
然后像这样在委托 textFieldDidEndEditing 中放置一个 if 语句:
-(void) textFieldDidEndEditing:(UITextField*) textfield
{
if(textfield.tag == index0) do something..
else if(textfield.tag == index1) do something..
}
取决于您想访问本文的位置取决于它的难易程度。
想要访问 cellForRowAtIndex 中的文本 -(非常简单)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
menuCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
if ([indexpath row] == 2) {
menuCell.nameTextField.delegate = self;
}
NSString * text = menuCell.nameTextField.text;
return cell;
如果你想访问VC中任意位置的文本并且menuCell是唯一的(只有一个)-(中等难度)
在您的头文件中将自定义单元格添加为 class
@class menuCell;
这意味着您可以在界面中将其设置为变量
menuCell * _menuCell;
接下来在 cellForRowAtIndex 中您要分配此自定义单元格
- (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == bCustomCellSection) {
if (!_menuCell) {
_menuCell = [tableView_ dequeueReusableCellWithIdentifier:bProfileNameCell];
_menuCell.nameTextField.delegate = self;
}
_menuCell.nameTextField.placeholder = @"Name";
_menuCell.selectionStyle = UITableViewCellSelectionStyleNone;
return _menuCell;
}
...
}
这意味着我们现在可以从 VC 中的任何位置访问菜单单元格,并且可以通过调用
获取文本
_menuCell.nameTextField.text
- 具有多个文本字段的多个自定义单元格 -(困难)
我从来没有这样做过,但可能会选择以下两种方式之一
a) 创建一个数组,当我们创建自定义单元格时,每次都将指向文本字段的指针添加到数组中。然后我们可以从该数组访问我们想要的文本字段
对于此方法,我会将自定义单元格添加到界面中定义的可变数组中
NSMutableArray * cellsArray;
记得在viewDidLoad里初始化
cellsArray = [NSMutableArray new];
然后在 cellForRowAtIndex 中每次添加单元格
menuCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
[cellsArray addObject: menuCell];
这显然取决于我们有多少节。如果我们有多个部分,它会再次变得更加复杂:
然后我们需要将每个部分的数组添加到整个数组中。这是相当复杂的,可能有一个完整的问题,有一个很好的 link 如何做到这一点 here:
一旦有了单元格数组(或单元格数组),就可以根据 indexPath 调用所需的单元格并获取 textField
b) 调用指向我们想要的特定单元格的指针
menuCell * menuCell = [self tableView:table cellForRowAtIndexPath:indexPath];
然后像之前一样从此单元格中获取文本字段。
请记住,如果您想在 cellForRow 之外创建一个索引路径,您可以计算自己的索引路径:
NSIndexPath * indexPath = [self.tableView indexPathForCell:cell];
如果您想访问特定的单元格,此方法非常好,但如果您想经常访问它并不得不在整个 VC
中调用此代码,则有点麻烦
希望对您有所帮助
我有一个带有 UITextField
的自定义 UITableViewCell
(链接到自定义单元格 class)。我正在尝试从我的 VC class.
textField
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
menuCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
if ([indexpath row] == 2) {
menuCell.nameTextField.delegate = self;
}
return cell;
}
-(void) textFieldDidEndEditing:(UITextField*) textfield
{
}
如何从 textFieldDidEndEditing
获取 textFields
文本?
如果您询问如何从委托方法 textFieldDidEndEditing 中获取文本,那么您只需这样做:
-(void) textFieldDidEndEditing:(UITextField*) textfield
{
NSString *textFieldText = textfield.text;
}
但是,如果您有多个文本字段并且您想知道哪个文本字段正在调用委托,您可以标记您的文本字段:
[myTextField setTag:indexPath.row]
然后像这样在委托 textFieldDidEndEditing 中放置一个 if 语句:
-(void) textFieldDidEndEditing:(UITextField*) textfield
{
if(textfield.tag == index0) do something..
else if(textfield.tag == index1) do something..
}
取决于您想访问本文的位置取决于它的难易程度。
想要访问 cellForRowAtIndex 中的文本 -(非常简单)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { menuCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"]; if ([indexpath row] == 2) { menuCell.nameTextField.delegate = self; } NSString * text = menuCell.nameTextField.text; return cell;
如果你想访问VC中任意位置的文本并且menuCell是唯一的(只有一个)-(中等难度)
在您的头文件中将自定义单元格添加为 class
@class menuCell;
这意味着您可以在界面中将其设置为变量
menuCell * _menuCell;
接下来在 cellForRowAtIndex 中您要分配此自定义单元格
- (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == bCustomCellSection) {
if (!_menuCell) {
_menuCell = [tableView_ dequeueReusableCellWithIdentifier:bProfileNameCell];
_menuCell.nameTextField.delegate = self;
}
_menuCell.nameTextField.placeholder = @"Name";
_menuCell.selectionStyle = UITableViewCellSelectionStyleNone;
return _menuCell;
}
...
}
这意味着我们现在可以从 VC 中的任何位置访问菜单单元格,并且可以通过调用
获取文本_menuCell.nameTextField.text
- 具有多个文本字段的多个自定义单元格 -(困难)
我从来没有这样做过,但可能会选择以下两种方式之一
a) 创建一个数组,当我们创建自定义单元格时,每次都将指向文本字段的指针添加到数组中。然后我们可以从该数组访问我们想要的文本字段
对于此方法,我会将自定义单元格添加到界面中定义的可变数组中
NSMutableArray * cellsArray;
记得在viewDidLoad里初始化
cellsArray = [NSMutableArray new];
然后在 cellForRowAtIndex 中每次添加单元格
menuCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
[cellsArray addObject: menuCell];
这显然取决于我们有多少节。如果我们有多个部分,它会再次变得更加复杂:
然后我们需要将每个部分的数组添加到整个数组中。这是相当复杂的,可能有一个完整的问题,有一个很好的 link 如何做到这一点 here:
一旦有了单元格数组(或单元格数组),就可以根据 indexPath 调用所需的单元格并获取 textField
b) 调用指向我们想要的特定单元格的指针
menuCell * menuCell = [self tableView:table cellForRowAtIndexPath:indexPath];
然后像之前一样从此单元格中获取文本字段。
请记住,如果您想在 cellForRow 之外创建一个索引路径,您可以计算自己的索引路径:
NSIndexPath * indexPath = [self.tableView indexPathForCell:cell];
如果您想访问特定的单元格,此方法非常好,但如果您想经常访问它并不得不在整个 VC
中调用此代码,则有点麻烦希望对您有所帮助