帮助! 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 内的信息按钮时添加模式视图控制器
通过在另一个 ViewController 中按下按钮/在另一个 ViewController 中引用 UITableView 创建 UITableViewCell