4

我在表格内的自定义单元格中有一个 UITextField。我创建了新类DataCell,它是 UITableViewCell 的子类。在 DataCell 中,我为文本字段创建了出口,并且在实现文件中也有使用“编辑结束”的方法,并在那里操作文本字段值。

我现在想知道如何获取单元格的 rowIndex 或编号,因为每次单击 + 按钮时都会在表格上加载新的自定义单元格。如果我得到标签,无论我选择什么单元格,我总是会得到相同的标签号。

4

4 回答 4

11

传递给您的委托的文本字段是单元格的子视图contentView

UITableViewCell *cell = (UITableViewCell*) textField.superview.superview; 
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
于 2013-04-02T16:34:51.107 回答
2

当您不确定文本字段和单元格之间的层次结构时,可以使用此逻辑。

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]; 
于 2013-04-02T16:47:55.497 回答
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 中的表视图控制器。

于 2013-04-02T17:38:33.163 回答
0

如果我们接受脆弱的答案,那么为了对对话做出新的贡献:

CGRect rectInTableView =
    [tableView convertRect:textField.bounds fromView:textField];

NSUInteger indexOfCellContainingTextField =
    (NSUInteger)(rectInTableView.y / tableView.rowHeight);

使其脆弱的假设:(i)所有行的高度相同;(ii) 高度在表格视图上设置。如果您尚未实施UITableViewDelegate -tableView:heightForRowAtIndexPath:,那么这两个假设都将成立。您还利用了将正浮点数转换为整数向下舍入的事实。

我会争辩说,尽管还没有完全清除假设,但这比 Mundi 的解决方案要脆弱,因为它只对您直接控制的事情(即单元格大小)做出假设,而不是对您不控制的事情(即视图层次结构)做出假设UIKit 在内部使用来呈现表格视图)。

于 2013-04-02T18:31:10.833 回答