0

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

- (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 时,它们确实得到了正确的初始化。我是否必须存储在父控制器中选择的行,然后从详细视图回调文件所有者,或者有什么方法可以同时初始化详细视图并创建它?

4

1 回答 1

2

您有 2 个选项:

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

  2. 传递NSDictionarytoTransactionDetailViewController并在viewDidLoad.

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

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

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

所以,在你的情况下,我可能会添加一个NSDictionary属性TransactionDetailViewController,然后做

[transactionDetailViewController setTransaction:rowDict]

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

于 2009-03-30T01:30:29.490 回答