いくつかの共通操作を再利用するために、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;
}
}
テストしてみましたが、動作しました。