从自定义UITableView获取UItextFields文本

时间:2015-03-12 23:28:34

标签: ios objective-c uitableview custom-cell

我有一个UITableViewCell的自定义UITextField(链接到自定义单元格类)。我正在尝试从我的VC类访问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
{

}

如何从textFields获取textFieldDidEndEditing文字?

2 个答案:

答案 0 :(得分:1)

根据您要访问的位置,此文本取决于其难度。

  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是唯一的(只有其中一个) - (中等难度)

  3. 在您的标题文件中,将自定义单元格添加为类

    @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. 具有多个文本字段的多个自定义单元格 - (强硬)
    2. 我从来没有这样做,但可能会采取两种方式之一

      a)创建一个数组,当我们创建自定义单元格时,每次都会向textFields添加一个指向数组的指针。然后我们可以从该数组中访问我们想要的textField

      对于这个方法,我会将自定义单元格添加到接口

      中定义的可变数组中
      NSMutableArray * cellsArray;
      

      记得在viewDidLoad

      中初始化它
      cellsArray = [NSMutableArray new];
      

      然后在cellForRowAtIndex中我会每次添加单元格

      menuCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
      [cellsArray addObject: menuCell];
      

      这显然取决于我们有多少部分。如果我们有多个部分,它会再次变得更复杂:

      然后我们需要为每个部分添加一个数组到整个数组。这是非常复杂的,可能有一个完整的问题,有一个如何做到这一点的良好链接here

      一旦你有一个单元格数组(或一组单元格数组),你可以根据indexPath调用你想要的单元格并得到textField

      b)调用指向我们想要的特定单元格的指针

      menuCell * menuCell = [self tableView:table cellForRowAtIndexPath:indexPath];
      

      然后像我们之前那样从这个单元格中获取textField。

      如果你想在cellForRow之外创建一个,你可以计算你自己的indexPath:

      NSIndexPath * indexPath = [self.tableView indexPathForCell:cell];
      

      如果您想要访问特定的单元格,但是如果您想要访问它并且不得不在整个VC上调用此代码,那么此方法非常好用

      希望这有帮助

答案 1 :(得分:0)

如果您询问如何从委托方法textFieldDidEndEditing获取文本,那么您只需执行此操作:

-(void) textFieldDidEndEditing:(UITextField*) textfield
{
   NSString *textFieldText = textfield.text; 
}

但是,如果您有多个textField并且想要知道调用该委托的文本字段,则可以标记textField:

[myTextField setTag:indexPath.row]

然后将if语句放在委托textFieldDidEndEditing中,如下所示:

-(void) textFieldDidEndEditing:(UITextField*) textfield
{
    if(textfield.tag == index0) do something..
    else if(textfield.tag == index1) do something..
}