Objective-Cで、ページ遷移時に次に表示するコントローラーに値をセットするには


StoryboardのSegueを使って画面遷移する際に表示するViewControllerに値をセットするには、まず、以下のようにStoryboard SegueのIdentifierに名前をつけておきます。
ここでは、モダールで表示するので適当に”Modal”と入力しています。
Segue-setting

画面遷移のする前には、遷移元のprepareForSegueが呼ばれるので、そこで上で指定したIdentifierでSegueを特定し、ターゲットのコントローラを取得して値をセットします。
ここでは、delegateをセットしています。
[c title=”AppViewController.m”]
– (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Modal"])
{
ModalViewController *controller = [segue destinationViewController];
controller.delegate = self;
}
}
[/c]

補足

モーダルを閉じたときの処理についても書いておきます。

モーダルを閉じたときは、上でdelegateにセットしていたProtocolのメソッドでモーダルから値を渡します。
[c title=”ModalViewController.h”]
@class ModalViewController;
@protocol ModalViewControllerDelegate
– (void)didSelectAnimal: (ModalViewController *)controller call:(NSString *) call;
@end

@interface ModalViewController : UIViewController
@property (nonatomic, weak) id delegate;
@end
[/c]
選択した動物の鳴き声をラベルに表示します。
[c title=”ModalViewController.m”]
– (IBAction)selectDogButton:(id)sender {
[_delegate didSelectAnimal:self call:@"Bow"];
}

– (IBAction)selectCatButton:(id)sender {
[_delegate didSelectAnimal:self call:@"Mew"];
}
[/c]
Protocolの実装
[c title=”AppViewController.m”]
– (void)didSelectAnimal:(ModalViewController *)controller call:(NSString *) call
{
self.callLabel.text = call;
[self dismissViewControllerAnimated:YES completion:nil];
}
[/c]
ラベルを変更した後に、モーダルを閉じています。

参考: 初めての Storyboard in iOS 5 Part 2 | Ray Wenderlich

,