ViewController
モデルタイプのセグエを実行するものがあり、もう1つUITableViewController
は下から来て、カテゴリがにありUITableView
ます。選択したカテゴリのいずれかが送信者コントローラーにデータを返さなければならないことを望んでいます
2 に答える
最初のViewControllerをモーダルのカスタムデリゲートとして設定します。このメソッドの最初のViewControllerのまたはUITableViewController
への参照を次のように取得できます。UITableViewController
UITableView
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([[segue identifier] isEqualToString:@"tableviewController"]){
MyTableViewController *myTableViewController = (MyTableViewController *)[segue destinationViewController];
myTableViewController.delegate = self;
}
}
テーブルビューコントローラでデリゲートコールバックなどとプロパティを設定する必要があります。あなたがまだ知らない場合、これを行う方法についてのガイドがたくさんあるはずです、ここに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];