从表格单元格中获取事件

时间:2013-06-15 14:59:21

标签: ios uitableview

我开始我的ios开发并开始我认为制作一个测量转换器会很有趣。

我设法用故事板创建带有segues的表格视图,带有文本字段的自定义单元格以及与不同尺寸相对应的标签,但现在我卡住了,无法在教程或书中找到答案。

在每个单元格中,存在对应于给定尺寸的文本字段(即,米,厘米等)。如何获取给定行中的文本字段已完成编辑的事件,并在计算后更改其他文本字段? (单元格是从包含计算所需的尺寸名称和值的数组创建的)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UILabel *label;
    UITextField *field;
    static NSString *CellIdentifier = @"DimensionCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    label = (UILabel *)[cell viewWithTag:1];
    field = (UITextField *)[cell viewWithTag:2];
    field.delegate = self;
    NSString *DimensionLabel = [self.dimension objectAtIndex:indexPath.row];
    label.text = DimensionLabel;
    return cell;
}

2 个答案:

答案 0 :(得分:3)

您需要将UITextField的委托设置为呈现tableView的viewController。

您可以给每个textField标记,也可以检查textFieldDidEndEditing:委托中textField的点,以找到用于标识textField的indexPath。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier
                                                            forIndexPath:indexPath];

    cell.customTextField.delegate = self;
    //You can use tag if there is only one section
    //If there is more than one section then this will be ambiguos
    cell.customTextField.tag = indexPath.row;

    //Set other values

    return cell;
}

- (void)textFieldDidEndEditing:(UITextField *)textField{

    CGPoint textFieldOrigin = [textField convertPoint:textField.frame.origin toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:textFieldOrigin];
    //Now you can use indexPath for updating your dataSource 

}

答案 1 :(得分:0)

您可以使用UITextField的restorationId属性。为每个文本字段提供restoreID,如下所示:

textField.restorationID = @"dimension1";
textField.delegate = self;

然后在下面的textfield委托方法中,您可以检查restoreID以识别编辑了哪个textField。

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    if([textField.restorationID isEqualToString:@"dimension1"])
    {
         // perform calculation and any updation required.
    }
}

我建议您将维度名称用作restoreID。这可以帮助您在委托方法中识别文本字段。