帮助! uitableviewcell 按钮按下更新文本字段

Posted

技术标签:

【中文标题】帮助! uitableviewcell 按钮按下更新文本字段【英文标题】:HELP! uitableviewcell buttonpressed update textfield 【发布时间】:2011-03-15 23:50:02 【问题描述】:

我想按下 QTY 按钮(红色文本)并将文本(即 13)复制到同一行的文本字段中。

-(IBAction)qtyButtonPressed:(id)sender 

UITextField *textField = (UITextField *)[self.view viewWithTag:3];

textField.text = @"13";

这就是我的自动取款机。

【问题讨论】:

如果您发布相关代码,您可能会得到更多答案。 【参考方案1】:

如果每个单元格都有一个按钮,首先您需要能够识别单击了哪一行中的哪个按钮。通常如果它是一个有 1 个部分的表格,您可以将行号设置为 cellForRowAtIndexPath 内的按钮标记值:... 设置单元格可见时

[button setTag:indexPath.row];

然后在按下按钮时调用的选择器中,获取标签值以确定行号,并为该行中的文本字段设置文本

  int row = [sender tag];
  NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row section:0];
  id cell = [tableView cellForRowAtIndexPath:indexPath];
  [cell.textField setText:....];

为此,您需要将 UITableViewCell 子类化,并通过属性/合成使按钮和 textField 可访问。

【讨论】:

【参考方案2】:

我知道这已经得到解答,但我遇到了类似的问题,不幸的是,我使用标签来查找表格视图单元格中的字段,以允许我在 InterfaceBuilder/Xcode 中进行布局,并且仍然避免像这样子类化:

- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath 
    static NSString *AttributeCellIdentifier = @"AttributeCell";
    UITableViewCell *cell;
    UILabel *label;
    UITextField *value;
    MyAttribute *a;

    switch( indexPath.section ) 
        case ATTRIBUTES_SECTION:
            cell = [tableView dequeueReusableCellWithIdentifier: AttributeCellIdentifier];
            label = (UILabel *) [cell viewWithTag: 1];
            value = (UITextField *) [cell viewWithTag: 2];
            a = [attributeList objectAtIndex: indexPath.row];
            label.text = a.label;
            value.text = a.value;
            break;
        // Other sections...
    
    return cell;

但这意味着我不能对文本字段所在的行使用标签。因此,作为使用标签的替代方法,我使用文本字段中的坐标来查看它所在的行,如下所示:

- (void) textFieldDidEndEditing: (UITextField *) textField 
    NSLog( @"Entering %s with %@", __func__, textField );
    NSIndexPath *textFieldLocation = [self.tableView indexPathForRowAtPoint: [textField convertPoint:textField.bounds.origin toView: self.tableView]];
    NSLog( @"- The textfield is in the cell at: %@", textFieldLocation );

    if( textFieldLocation.section == ATTRIBUTES_SECTION ) 
        MyAttribute *a = [attributeList objectAtIndex: textFieldLocation.row];
        a.value = textField.text;
    

如果单元格中有多个文本字段,我仍然可以使用标记值来了解正在结束编辑的文本字段。

构建一个返回任何视图的 tableview 索引的小助手方法甚至可能是明智的:

- (NSIndexPath *) indexPathForView: (UIView *) view 
    NSIndexPath *loc = [self.tableView indexPathForRowAtPoint: [view convertPoint: view.bounds.origin toView: self.tableView]];
    return loc;

这可以放在一个类别中,并且无需任何编码即可轻松用于任何 tableview。

【讨论】:

【参考方案3】:

您可以在按钮上使用addTarget:action:forControlEvents:UIControlEventTouchUpInside 来注册一个选择器,当按钮被触摸时将调用该选择器。然后在该方法中,找到相应的文本字段并为其分配text 属性。

【讨论】:

感谢 Anomie,我已经做到了,但我无法“找到”相应的文本字段。有什么帮助吗?

以上是关于帮助! uitableviewcell 按钮按下更新文本字段的主要内容,如果未能解决你的问题,请参考以下文章

按下按钮时在 UITableViewCell 中查找按钮的 indexPath?

按下按钮时需要访问 UITableViewCell 的 detailTextLabel 属性

默认 UITableViewCell 状态

当我按下 uitableviewCell 内的信息按钮时添加模式视图控制器

通过在另一个 ViewController 中按下按钮/在另一个 ViewController 中引用 UITableView 创建 UITableViewCell

UITableViewCell 中的按钮 [重复]