2011-12-06 4 views
0

通常、実際には簡単なタスクのように聞こえます。ビューがあり、別のビューで変更を加えた後にデータをリロードするとします。しかし:それはUITableViewではなく、私はInterfaceBuildeを使用しなかった、ビューはプログラムによって作成されます。 TextFieldに表示される値はNSDictionaryに保持されます。もう一方のビューでは、表示される値のキーが変更されるため、ビューが再び表示される場合は新しい値を表示したいと考えています。だから、ここに私のコードは次のとおりです。一般的なUIViewでデータを再読み込み

- (void)loadView 
{ 
... 
NSMutableDictionary *selection = [[ValueDispatcher dispatcher] selectionIndex]; 
NSDictionary *labels = [[ValueDispatcher dispatcher] labelDic];  
NSDictionary *values = [[ValueDispatcher dispatcher] valDic]; 

NSEnumerator *theKeys = [labels keyEnumerator]; 
while (key = [theKeys nextObject]) 
{ 
    CGRect frame = CGRectMake(10, i, 300, 30); 
    UILabel *label = [[UILabel alloc] initWithFrame:frame]; 
    [label setText:[labels objectForKey:key]]; 
    [[self view] addSubview:label]; 

    CGRect fieldFrame = CGRectMake(10, i + 40, 300, 30); 
    textField = [[UITextField alloc] initWithFrame:fieldFrame]; 

    [textField setText:[[values objectForKey:key] objectForKey:[selection objectForKey:key]]]; 
    [[self view] addSubview:textField]; 
} 
    .... 

私の見解は、古い値がdisplayesと何も変わってまだイスト戻ったとき。どちらの方法を使うべきですか?私はすでにreloadInputViewsを試してみましたが、動作しませんでした。私が知っているだけの他のメソッド(reloadData)はTableViewのためにしか使えません...

+1

'loadView'ではなく' viewWillAppear: 'で値を設定することができます。 – Kjuly

答えて

2

値を変更しながらビューを隠す/その後、例えばナビゲーションスタックからポップすると、フィールドの更新にviewWillAppear:animated:を使用することを検討することができます。いずれにしても、更新とビューの作成を切り離す必要があります。

つまり、loadViewではこれらのビューを作成し、別のメソッド(updateDataなど)で表示されたデータを更新します。これらのサブビューへの参照を保持するには、viewController内でタグまたは適切なインスタンス変数を使用できます。

loadview内では、手動でupdateDataviewWillAppear:animated:を呼び出すことができます。

関連する問題