これを行うための現代的な方法(ios6 +)は、くつろぎのセグエを使用することです
storyBoardSegueの単一の引数を取るメソッドを定義することにより、これらの1つを作成します。
- (IBAction)unwindOnSelect:(UIStoryboardSegue *)segue;
このメソッドを、巻き戻したいviewControllerに追加します。
次に、くつろぎたいストーリーボードシーンで...CTRLキーを押しながら「選択」ボタンからシーン下部のバーにある緑色の「終了」記号までドラッグします。巻き戻しセグエは、オプションとしてポップアップに表示されます。それを選択します。ボタンを押すと、その目的地まで巻き戻され、unwindsegueメソッドのコードが実行されます。
segueオブジェクトは、ソースと宛先の両方のviewControllerへの参照を保持しているため、一方から他方にデータを取得する方法です。
- (void)unwindOnSelect:(UIStoryboardSegue *)segue
{
self.myObject = segue.sourceViewController.myProperty;
}
ここで、「セレクター「myProperty」の既知のインスタンスメソッドがありません。これを回避する1つの方法は#include "viewController3"
、VC1の.hまたは.mファイルの先頭にあることです。同様に型キャストする必要がある場合があります。
self.myObject = [(ViewController1*)segue.sourceViewController myProperty];
もう1つの方法は、少し間接的な方法です。
if ([segue.sourceViewController respondsToSelector:@selector(myProperty)]) {
self.myObject = [segue.sourceViewController performSelector:@selector(myProperty)];
}
これには、必要がないという利点がある#include "viewController3"
ため、もう少し分離され、もう少しオブジェクト化されます。