2009-03-30 15 views
0

私は銀行取引の一覧を表示しているテーブルビューを持っています。私がタップすると、現在のデータで初期化された編集ダイアログが表示されます。 amountField、nameField、および日付ピッカーが初期化されていないため、ナビゲーションコントローラを使用するとビューを初期化する方法

- (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]; 
} 

残念ながら、これは動作しません:私は現在、コントローラを取得するには、そのビュー上のテキストフィールドを初期化するために、このような何かをやっていますこの時点では0x00です。その結果、テキストまたは日付の値を設定しようとすると、渡されます。それらはviewDidLoadが呼び出されるときに適切に初期化されます。親コントローラで選択した行を保存してから、詳細ビューからファイル所有者にコールバックする必要がありますか?または、実際に詳細ビューを初期化して、実際に作成する方法がありますか?

答えて

2

あなたは2つのオプションがあります:

  1. TransactionDetailViewControllerinitメソッドをオーバーライドして、そこサブビュー

  2. TransactionDetailViewControllerNSDictionaryをパスし、viewDidLoadであなたの初期化を行う初期化

    を。

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

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

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

だから、あなたのケースでは、私はおそらくその後viewDidLoadで、私はサブビューの値を初期化しますTransactionDetailViewControllerNSDictionaryプロパティを追加し、

[transactionDetailViewController setTransaction:rowDict] 

を行うだろう。

+0

私はしばらくそれを彷彿とさせていましたが、それを行うにはきれいなやりかたに見えるオプション#2を考え出しました。方向をありがとう! –

+0

ようこそ。 =) –

関連する問題