从自定义 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..
}

取决于您想访问本文的位置取决于它的难易程度。

  1. 想要访问 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;
    
  2. 如果你想访问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
  1. 具有多个文本字段的多个自定义单元格 -(困难)

我从来没有这样做过,但可能会选择以下两种方式之一

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

中调用此代码,则有点麻烦

希望对您有所帮助