プログラムでセグエを作成する 質問する

プログラムでセグエを作成する 質問する

いくつかの共通操作を再利用するために、UIViewControllerすべての拡張に共通するものがあります。UIViewsControllers

UIViewController他のすべてが継承されるように、この「Common」に segue を設定したいと思いますUIViewControllers

それをプログラム的にどうやったら実現できるか考えています。

質問は、ストーリーボードにアクセスせずに手動でsegueすべてを設定する方法でもあると思います。UIViewControllers

ベストアンサー1

もう 1 つの可能性を追加したいと思います。実行できることの 1 つは、アクションにアタッチされていないセグエを使用してストーリーボード内の 2 つのシーンを接続し、ビュー コントローラー内でセグエをプログラムでトリガーすることです。これを行うには、セグエ シーンであるストーリーボード シーンの下部にあるファイルの所有者アイコンからドラッグし、目的のシーンに右ドラッグする必要があります。説明に役立つ画像を挿入します。

ここに画像の説明を入力してください

「手動セグエ」のポップアップが表示されます。タイプとして「プッシュ」を選択しました。小さな四角形をタップして、属性インスペクタが表示されていることを確認します。コード内で参照するために使用する識別子を指定します。

ここに画像の説明を入力してください

さて、次はプログラムによるバー ボタン項目を使用して処理を進めます。viewDidLoad または他の場所で、次のコードを使用してナビゲーション バーにボタン項目を作成します。

UIBarButtonItem *buttonizeButton = [[UIBarButtonItem alloc] initWithTitle:@"Buttonize"
                                                                    style:UIBarButtonItemStyleDone
                                                                   target:self
                                                                   action:@selector(buttonizeButtonTap:)];
self.navigationItem.rightBarButtonItems = @[buttonizeButton];

セレクターが buttonizeButtonTap: であることに注意してください。したがって、そのボタンの void メソッドを記述し、そのメソッド内で次のように segue を呼び出します。

-(void)buttonizeButtonTap:(id)sender{
    [self performSegueWithIdentifier:@"Associate" sender:sender];
    }

sender パラメータは、prepareForSegue が呼び出されたときにボタンを識別するために必要です。prepareForSegue は、シーンをインスタンス化し、その作業に必要な値を渡すフレームワーク メソッドです。私のメソッドは次のようになります。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"Associate"])
    {
        TranslationQuizAssociateVC *translationQuizAssociateVC = [segue destinationViewController];
        translationQuizAssociateVC.nodeID = self.nodeID; //--pass nodeID from ViewNodeViewController
        translationQuizAssociateVC.contentID = self.contentID;
        translationQuizAssociateVC.index = self.index;
        translationQuizAssociateVC.content = self.content;
    }
}

テストしてみましたが、動作しました。

おすすめ記事