1

私はどちらかの側にテーブルビューがあり、両側で何らかの相互作用が起こるたびにテーブルのリロードが必要なスプリットビューコントローラを持っています。スプリットビューコントローラの左側(マスター)でセルが選択されるたびに、デリゲートを実装してディテールビューコントローラを更新しました。UISplitViewControllerの詳細ビューとマスタービューの間でビューを更新するにはどうすればいいですか?

1.私はもう一度デリゲートを実装して両方向にする必要があるか(つまり、マスタービューを更新する場合)、または一般的なアプローチがあるかどうかを知りたいですか。

2.私はすでに両方のクラスのコードを書いています。つまり、左側のセルを選択すると、ビューを再読み込み/更新するデリゲートメソッドによって正しい更新が行われますが、viewWillAppear/viewDidAppear/viewWillDisapperのようなメソッドがあります。 ..etcは呼び出されません。左のセル選択でトリガされたdelegateMethodからviewWillAppearメソッドを手動で呼び出すようになりました。クラスメソッドがautoと呼ばれるように私が欠けているテクニックがありますか?またはsplitViewControllerを使用する最良の方法を指摘できますか?

答えて

1

おそらく、テーブルをリロードするには、UITableViewのreload...メソッドのいずれかを使用する必要があります。 reloadDataメソッドは完全なテーブルをリロードします。どちらの行が変更されているかわかっている場合は、他の方法のいずれかを使用してください。 変更が行数にも含まれている場合は、insert...またはdelete...のいずれかの方法を使用して適切なアニメーションを取得する必要があります。 すべての詳細については、UITableView documentationを参照してください。

最初の質問では、詳細ビューコントローラーがマスターをデリゲートとして持つことが期待されます。しかし、マスターは、どの詳細ビューコントローラが右側にあるのかを単に知るべきです。結局のところ、彼はそれを始めました。

2

最初に、これらの動作が将来変更される可能性があるため、viewWillAppearなどをコードから呼び出すことはお勧めできません。 (たとえば、以前のiOSバージョンではviewDidLoadが複数回呼び出されていましたが、現在はインスタンスごとに1回呼び出されています)。コードを別のメソッドに移動するだけで済みます。

第2に、変更を伝える手段としてNSNotificationを見たいと思うかもしれません。それは簡単で、委任ポインタを保持する必要はありません。項目をタップすると、詳細側から

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(updateFromDetail:) name:DETAIL_UPDATED object:nil]; 

... 

-(void)updateFromDetail:(NSNotification *)no 
{ 
    NSDictionary *nd = [no userInfo]; // get relevant information 

    // take action.... 
} 

:マスタコントローラで

#define MASTER_UPDATED @"MasterUpdated" 
#define DETAIL_UPDATED @"DetailUpdated" 

、その後のようなものを:あなたは、子ビューコントローラの.hに追加できます例えば

NSDictionary *userInfo = @{@"somekey":@"somevalue", @"anotherkey":@"anothervalue"}; 

[[NSNotificationCenter defaultCenter] postNotificationName:DETAIL_UPDATED 
    object:self userInfo:userInfo]; 
+0

はい、代議員以外の通知を使用します。 – djay

0

こんにちは@Divjyot私は現在同様のシナリオで作業していますが、私は持っていますセルをクリックすると、別のビューコントローラーに変更されます。 masterViewController(PrimaryViewCOntroller)にすべてのViewControllerを作成して配列し、デリゲートを使用してセル選択時に渡しました。したがって、primaryViewControlelrのセルをクリックすると、新しいViewControllerでsecondaryViewCOntrollerが更新されます。このコメントを実装する方法を詳しく知りたい場合

+1

さようなら!私はデリゲートを使用してマスターから詳細までupdateUIを起動します。リバースロールの通知。マスターとディテールの両方を同時にリフレッシュする必要がありました。洞察に感謝します! – djay

関連する問題