繁体   English   中英

从自定义UITableView获取UItextFields文本

[英]Get UItextFields text from custom UITableView

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

}

如何从textFieldDidEndEditing获取textFields文本?

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

  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 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)创建一个数组,并在创建自定义单元格时向数组添加每次指向textFields的指针。 然后,我们可以从该数组访问所需的textField

对于这种方法,我会将自定义单元格添加到接口中定义的可变数组中

NSMutableArray * cellsArray;

记得在viewDidLoad中初始化它

cellsArray = [NSMutableArray new];

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

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

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

然后,我们需要为每个部分的整个数组添加一个数组。 这是相当复杂的,可能有一个整体的问题,对自己,有一个如何做一个很好的链接在这里

一旦有了一个单元格数组(或一个单元格数组),就可以基于indexPath调用所需的单元格并获取textField

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

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

然后像以前一样从该单元格获取textField。

请记住,如果要在cellForRow之外创建一个indexPath,则可以计算自己的indexPath:

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

如果您要访问特定的单元格,则此方法非常好,但如果要大量访问该单元格,并且必须在整个VC上始终调用此代码,则此方法会比较麻烦

希望这可以帮助

如果您询问如何从委托方法textFieldDidEndEditing中获取文本,则只需执行以下操作:

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

但是,如果您有多个textField,并且想知道哪个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..
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM