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. に渡して、NSDictionaryTransactionDetailViewController初期化を行いますviewDidLoad

私は通常、2つの方法を組み合わせます。

ビューが複雑でない場合(そして実際にNIBファイルを使用する必要がない場合)、でビューを作成できますinit

一方、NSDictionaryビューにを渡すと、戻り値を取得しやすくなる場合があります。

したがって、あなたの場合、私はおそらくにNSDictionaryプロパティを追加しTransactionDetailViewController

[transactionDetailViewController setTransaction:rowDict]

次に、viewDidLoadで、サブビューの値を初期化します。

于 2009-03-30T01:30:29.490 に答える