我在表格中的自定义单元格中有一个UITextField。我创建了新类 DataCell ,它是UITableViewCell的子类。在DataCell内部,我为textfields创建了出口,我在实现文件中也有方法,使用'editing did end'并在那里操作textField值。
我现在想知道如何获取rowIndex或单元格的数量,因为每次单击+按钮时,新的自定义单元格都会加载到表格中。如果我得到标签,无论我选择哪个单元格,我都会得到相同的标签号。
答案 0 :(得分:11)
传递给您的委托的文本字段是单元格contentView
的子视图。
UITableViewCell *cell = (UITableViewCell*) textField.superview.superview;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
答案 1 :(得分:2)
当您不确定textfield和cell之间的层次结构时,可以使用此逻辑。
UITableViewCell *cell = nil;
UIView *parentView = textField.superview;
while(parentView) {
if([parentView isKindOfClass:[UITableViewCell class]]) {
cell = parentView;
break;
}
parentView = parentView.superview;
}
if(cell)
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
答案 2 :(得分:1)
在tableView:cellForRowAtIndexPath:方法的文本字段中添加标签。在这个例子中,我有一个带标签和文本字段的自定义单元格:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
RDCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.label1.text = self.theData[indexPath.row];
cell.textField.tag = indexPath.row;
return cell;
}
听起来您可能正在处理自定义单元类中的编辑结束,但您可能需要考虑在表视图控制器中执行此操作,因为这样可以轻松访问模型,我认为您是使用用户在文本字段中键入的内容进行修改。如果这样做,那么您应该将文本字段的委托属性连接到IB中的表视图控制器。
答案 3 :(得分:0)
如果我们接受脆弱的答案,那么为了给对话提供新的东西:
CGRect rectInTableView =
[tableView convertRect:textField.bounds fromView:textField];
NSUInteger indexOfCellContainingTextField =
(NSUInteger)(rectInTableView.y / tableView.rowHeight);
使其脆弱的假设:(i)所有行都是相同的高度; (ii)在桌子视图上设置高度。如果您尚未实施UITableViewDelegate -tableView:heightForRowAtIndexPath:
,那么这两个假设都将成立。您还利用了将正浮点数转换为整数的事实。
我认为虽然仍然没有完全清楚假设,但这不像Mundi的解决方案那么脆弱,因为它只假设你直接控制的东西(即细胞大小),而不是你不做的事情(即,视图层次结构UIKit在内部使用它来呈现表视图。