【问题标题】:How Do I Initialize a View When Using Navigation Controller使用导航控制器时如何初始化视图
【发布时间】:2009-03-30 01:00:20
【问题描述】:

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

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

【问题讨论】:

    标签: iphone navigation


    【解决方案1】:

    你有两个选择:

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

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

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

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

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

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

    [transactionDetailViewController setTransaction:rowDict]
    

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

    【讨论】:

    • 好买卖!我自己用它闲逛了一段时间,并想出了选项#2,这似乎是一个不错的干净方法。感谢您的指导!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多