1

いずれかの側にテーブル ビューがあり、どちらかの側で何らかの操作が発生するたびにテーブル データをリロードする必要がある分割ビュー コントローラーがあります。分割ビュー コントローラーの左側 (マスター) でセルが選択されるたびに、詳細ビュー コントローラーを更新するデリゲートを実装しました。

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

2.私はすでに両方のクラスのコードを書いているので、左のセルを選択すると、ビューをリロード/リフレッシュするデリゲートメソッドを介して右の更新が行われますが、viewWillAppear/viewDidAppear/viewWillDisapper ...などのメソッドは呼び出されません。左のセル選択でトリガーされるデリゲート メソッドから手動で viewWillAppear メソッドを呼び出しています。クラスメソッドが自動的に呼び出されるように、私が欠けているテクニックはありますか? または、誰かが splitViewController を使用するための最良のアプローチを指摘できますか?

4

4 に答える 4

2

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

第 2 に、変更を伝える方法として NSNotification を検討することをお勧めします。これは簡単で、デリゲート ポインターを保持する必要はありません。

たとえば、子ビュー コントローラー .h に次のように追加できます。

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

次に、マスターコントローラーで次のようにします。

[[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....
}

具体的には、アイテムがタップされたときに、次のようなメッセージを送信します。

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

[[NSNotificationCenter defaultCenter] postNotificationName:DETAIL_UPDATED 
    object:self userInfo:userInfo];
于 2016-07-16T16:15:44.197 に答える
1

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

最初の質問については、詳細ビュー コントローラーがマスターをデリゲートとして持っていることを期待します。ただし、マスターは、どの詳細ビュー コントローラーが右側にあるかを単純に認識している必要があります。結局のところ、彼はそれを始めました。

于 2016-07-16T16:01:39.213 に答える
0

こんにちは@Divjot私は現在同様のシナリオに取り組んでいますが、セルをクリックするとdetailVIewController(SecondaryViewController)の別のviewcontrolelrに変更する必要があるため、これが私が作成したものであり、masterViewController(PrimaryViewCOntroller)のすべてのviewcontrollersを配列して渡しましたデリゲートを使用したセル選択の detailViewController。したがって、primaryViewControlelr のセルをクリックすると、secondaryViewCONtroller が新しい ViewController で更新されます。以下のこのコメントを実装する方法に関する詳細情報が必要な場合

于 2016-07-19T07:40:18.563 に答える
0

あなたの質問に答える:

1º プロトコル UISplitViewControllerDelegate には、いつ splitviewcontroller が表示モードを変更するかを示すメソッドがあります。このメソッドは、一部のビュー コントローラーのデータを更新するのに非常に便利です。

- (void)splitViewController:(UISplitViewController *)svc willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode;

2º 一方、ユーザーがセルまたはその他のアクションを選択したときに、View Controller のデータを更新する必要がある場合があります。

コードに関する詳細情報を共有していただければ、より具体的に説明できます。

于 2018-07-03T10:54:17.770 に答える