デリゲート デザイン パターンを使用して、2 つのオブジェクトが相互に通信できるようにします ( Apple リファレンス)。
一般に:
- シーン 2 でデリゲートというプロパティを作成します。
- シーン 2 デリゲートが定義する必要があるメソッドを定義するシーン 2 のプロトコルを作成します。
- シーン 1 からシーン 2 へのセグエの前に、シーン 1 をシーン 2 のデリゲートとして設定します。
- シーン 2 でセルが選択されたら、シーン 2 のデリゲートにメッセージを送信して、デリゲートに選択を通知します。
- デリゲートが選択を処理できるようにし、選択が行われた後にシーン 2 を閉じます。
そして例として:
シーン 2 インターフェース
@class LabelSelectionTableViewController
@protocol LabelSelectionTableViewControllerDelegate
- (void)labelSelectionTableViewController:(LabelSelectionTableViewController *)labelSelectionTableViewController didSelectOption:(NSString *)option;
@end
@interface LabelSelectionTableViewController : UITableViewController
@property (nonatomic, strong) id <LabelSelectionTableViewControllerDelegate> delegate;
@end
シーン 2 の実装
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[self.delegate labelSelectionTableViewController:self didSelectOption:cell.textLabel.text];
}
シーン 1 の実装
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.destinationViewController isKindOfClass:[LabelSelectionTableViewController class]] == YES)
{
((LabelSelectionTableViewController *)segue.destinationViewController).delegate = self;
}
}
// a selection was made in scene 2
- (void)labelSelectionTableViewController:(LabelSelectionTableViewController *)labelSelectionTableViewController didSelectOption:(NSString *)option
{
// update the model based on the option selected, if any
[self dismissViewControllerAnimated:YES completion:nil];
}