使用导航控制器时如何初始化视图

时间:2009-03-30 01:00:21

标签: iphone navigation

我有一个表格视图,显示了银行交易清单。当我点击一个时,我想显示编辑对话框,用当前数据初始化。我正在做这样的事情来获取控制器并在其视图上初始化文本字段:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {   
    TransactionDetailViewController *transactionDetailViewController;
    transactionDetailViewController = [[TransactionDetailViewController alloc] initWithNibName:@"TransactionDetailViewController" bundle:nil];

    // round up data
    NSMutableDictionary *rowDict = (NSMutableDictionary *)[transactions objectAtIndex:indexPath.row];

    transactionDetailViewController.amountField.text = [rowDict objectForKey:@"amount"];
    transactionDetailViewController.nameField.text = [rowDict objectForKey:@"name"];
    transactionDetailViewController.datePicker.date = [rowDict objectForKey:@"date"];   

    [self.navigationController pushViewController:transactionDetailViewController animated:YES];
    [transactionDetailViewController release];
}

不幸的是,这不起作用,因为此时还没有初始化amountField,nameField和datePicker - 它们是0x00,因此,当我尝试设置文本时,它会被传递或日期值。它们会在viewDidLoad被调用时正确初始化。我是否必须存储在父控制器中选择的行,然后从详细信息视图中回调文件所有者,或者是否有某种方式我可以在创建它的同时和位置实际初始化详细视图? / p>

1 个答案:

答案 0 :(得分:2)

您有两个选择:

  1. 覆盖init中的TransactionDetailViewController方法,并在那里初始化子视图

  2. NSDictionary传递给TransactionDetailViewController并在viewDidLoad进行初始化。

  3. 我通常将这两种方法结合起来。

    如果您的视图不复杂(并且您实际上不需要使用NIB文件),则可以在init中构建视图。

    另一方面,将NSDictionary传递给视图可能会使您更容易获得返回值。

    因此,在您的情况下,我可能会将NSDictionary属性添加到TransactionDetailViewController,然后执行

    [transactionDetailViewController setTransaction:rowDict]
    

    然后在viewDidLoad中,我会初始化子视图中的值。