从视图中传回值

时间:2010-08-13 13:36:19

标签: iphone uitableview uitextfield

大家好,我有一个关于编辑表格单元格值并将编辑后的值返回原始单元格的问题。

我有一个UITableView,其中包含5个部分,每个部分包含1行。在cellForRowAtIndexPath中,我有以下内容:

static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
    }   

    NSString *fieldTitle;
    switch (indexPath.section)
    {
        case 0:
            fieldTitle = @"First Name";
            break;
        case 1:
            fieldTitle = @"Last Name";
            break;
        case 2:
            fieldTitle = @"Company";
            break;
        case 3:
            fieldTitle = @"Email Address";
            break;
        case 4:

                fieldTitle = @"Password";
                break;
    }

cell.textLabel.text = fieldTitle;

单击一行时,将触发didSelectRowAtIndexPath,如下所示:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    AddField *addField = [[AddField alloc] initWithStyle:UITableViewStyleGrouped];

    addField.field = cell.textLabel.text;
    addField.title = cell.textLabel.text;
    addField.value = cell.detailTextLabel.text;

    [self.navigationController pushViewController:addField animated:YES];

}

这将设置另一个包含一个部分和一行的UITableView。此表使用我编写的自定义单元格,其中包含用户可以编辑的文本字段。用户可以单击完成按钮返回上一个视图。

我的问题是:如何获取用户在AddField视图中输入的值,以显示在上一个视图中所选表格单元格的detailText标签中?此功能与在iPhone的本机日历应用程序中添加新事件的标题非常相似。

感谢您提供的任何帮助,如果您需要更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:0)

您是否尝试在原始tableView上调用reloadData?当然你需要chnage你的代码,以便fieldTitle从NSStrings数组中获取它的值......并将tableview数据源设置为该数组....

答案 1 :(得分:0)

您可以使用代理。声明一个协议,它是你的单元委托如下(从内存中如果不编译就道歉):

@protocol CellDelegate

@required

- (void) fieldValueChanged:(AddField *)field;

@end

在自定义单元格类中添加“id delegate”,并添加属性(非原子,赋值)并合成它。

然后在didSelectRowAtIndexPath中设置单元格时,执行以下操作:

[cell setDelegate:self];

现在在您查看控制器时,您只需实现该协议(CellDelegate),实现方法fieldValueChanged ....这将由单元调用。

现在在单元格中更改值时只需调用[delegate fieldValueChanged:addfield];

注意:实际上你应该在你编写的自定义单元类中设置AddField ...