1

ViewControllerモデルタイプのセグエを実行するものがあり、もう1つUITableViewControllerは下から来て、カテゴリがにありUITableViewます。選択したカテゴリのいずれかが送信者コントローラーにデータを返さなければならないことを望んでいます

4

2 に答える 2

2

最初のViewControllerをモーダルのカスタムデリゲートとして設定します。このメソッドの最初のViewControllerのまたはUITableViewControllerへの参照を次のように取得できます。UITableViewControllerUITableView

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([[segue identifier] isEqualToString:@"tableviewController"]){
         MyTableViewController *myTableViewController = (MyTableViewController *)[segue      destinationViewController];

         myTableViewController.delegate = self;
     }
} 

テーブルビューコントローラでデリゲートコールバックなどとプロパティを設定する必要があります。あなたがまだ知らない場合、これを行う方法についてのガイドがたくさんあるはずです、ここに1つがあります

2つのViewController間で通信するための単純なデリゲートを設定するにはどうすればよいですか?

于 2012-10-05T10:47:01.937 に答える
1

これがユーザーがビューを却下せずに繰り返し行う可能性がある場合、最善の策はおそらく通知を投稿し、送信者に登録してそれをリッスンさせることです。

通知を投稿するには、カテゴリが変更されるたびにこれを行います。

 NSNotification *aNotification = [NSNotification notificationWithName:categoryChangedNotification object:categoryThatWasChanged];
[[NSNotificationCenter defaultCenter] postNotification:aNotification];

送信者でそれを聞くには:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_refreshCategories) name:categoryChangedNotification object:nil];

不要なときに監視しないように、AddObserverとremoveObserverを適切に追加することを忘れないでください。

ユーザーがビューを選択してから閉じ、送信者ビューに戻る場合は、プロトコルを作成し、送信者を代理人として設定することをお勧めします。基本的に、プロトコルは次のように.hファイルに作成されます。

 @protocol myControllerDelegate
      -(void)myControllerFinishedEditingCategories:(id)sender;
 @end

次に、同じコントローラーにプロパティが必要です。

 @property (nonatomic, unsafe_unretained) id<myControllerDelegate> delegate;

送信ビューをプロトコルに準拠させます。

 @interface sendingViewController : UIViewController <myControllerDelegate>

これで、カテゴリの編集が終了したら、ビューを閉じる前に送信者のデリゲートメソッドを呼び出すことができます。

 [delegate myControllerFinishedEditingCategories:self];
于 2012-10-05T11:03:19.567 に答える