0

マスター/ディテール テンプレートを使用しています。詳細ビューにセグメント化されたコントロールがあり、MasterViewController をデリゲートとして設定しました。これにより、ユーザーに選択肢を与えることができます。セグメント化されたコントロールが機能していて、選択肢が MVC に渡されていることはわかっています。

それぞれの選択によって、MasterViewController のテーブル ビューにロードできる新しいデータ セットをトリガーしたいと考えています。私の問題は、テーブル ビューでデータを更新する方法が見つからないことです。

4

2 に答える 2

0

私だったら、デリゲートの代わりに通知を使用します。つまり、detailViewController 内で valueChanged を使用して segmentedControl 値の変更を検出し、masterViewController が受け取る detailViewcontroller から NSNotification を送信します。

最も簡単な方法は次のとおりです。

[[NSNotificationCenter defaultCenter] postNotificationName:@"segmentOneChosen" object:nil userInfo:nil];

この通知に masterViewController を登録してもらいます。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(segmentOneChosen) name:@"segmentOneChosen" object:nil];

選択した値を通知とともに渡す方がよいので、セグメントごとに個別の通知は必要ありません。

!! テストされていないコード:

NSArray *keys = [NSArray arrayWithObjects:@"segmentChosen", nil];
NSArray *objects = [NSArray arrayWithObjects:[NSNumber numberWithInt:self.topicsChoiceSegControl.selectedSegmentIndex], nil];
NSDictionary * dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
[[NSNotificationCenter defaultCenter] postNotificationName:@"segmentChosen" object:nil userInfo:dict];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(segmentChosen:) name:@"segmentChosen" object:nil];

-(void) segmentChosen:(NSNotification *)notification {
    NSNumber *segmentChosenNum = [[notification userInfo] valueForKey:@"segmentChosen"];
}

これはあなたの質問自体には答えないことはわかっていますが、克服しようとしている問題に対する代替ソリューションを提供します。

于 2013-02-07T14:07:53.513 に答える
0

で宣言されたインスタンス変数を使用して、変更MasterViewController中に更新することができUISegmentedControlます。それに基づいて、 に戻るとMasterViewController; viewWillAppearそのために使用します[tableView reloadData]

質問が間違っていたら教えてください。

編集:

integer名前を付けてくださいsegmentIndex。セグメントが変更されたときに更新します。表示する必要があるsegmentIndex負荷の値に基づいて、dataSourceUITableViewMasterViewController

編集2:

UISegmentedControlの値が変わるときは、 mvc.segmentIndex = (currentValueOfYourSegmentedControl);を入れます。次にMasterViewControllerviewWillAppear

switch (self.segmentIndex)
{
    case 0:
           // Set Datasource for First Choice.
           break;
    case 0:
           // Set Datasource for Second Choice.
           break;
    case 0:
           // Set Datasource for Third Choice.... and so on...
           break;
    default:
           // Default Behavior
           break;
}

あなたが私のポイントを得ることを願っています。

于 2013-02-07T12:23:04.203 に答える