44

他のすべてのシーンにアクセスできるようにしたいモーダルストーリーボードシーンがあります。ストーリーボードのすべてのシーンからモーダルセグエを作成すると、どこにでもある文字列の大きな混乱が発生します。セグエを省略して、代わりにプログラムでシーンを呼び出す方法はありますか?

基本的に私はこのようなことをしたいです:

  MyNewViewController *myNewVC = [[MyNewViewController alloc] init];
  [self presentModalViewController:myNewVC animated:YES];

ビューコントローラクラスを作成してプッシュする代わりに、「分離された」(セグエに接続されていない)ストーリーボードシーンへのモーダルトランジションを実行したいと思います。

4

8 に答える 8

87

はい、できます。VCにアクセスするには、次のようにしてから、モーダルプッシュします。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
MyNewViewController *myVC = (MyNewViewController *)[storyboard instantiateViewControllerWithIdentifier:@"myViewCont"];
于 2012-05-09T19:47:15.287 に答える
40

注:メソッドpresentModalViewController:animatedは、iOS6では非推奨になっています。

新しいコードは次のようになります。

NSString * storyboardName = @"MainStoryboard_iPhone";
NSString * viewControllerID = @"ViewID";
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil];
MyViewController * controller = (MyViewController *)[storyboard instantiateViewControllerWithIdentifier:viewControllerID];
[self presentViewController:controller animated:YES completion:nil];
于 2012-12-13T18:08:03.930 に答える
19

ストーリーボードで、ビューコントローラーに(属性インスペクターの下の)識別子を指定し、次のコードを使用してそのビューを前面に表示します。

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"STORYBOARDNAME" bundle:nil];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"VIEWCONTROLLERIDENTIFIER"];
[self presentModalViewController:vc animated:YES];
于 2012-05-09T19:45:21.890 に答える
6

アプリの主要部分からビューコントローラーを提示したい場合があります。ビューコントローラーには、設定やヘルプなどが含まれています。これを行うには、それをnavコントローラー内に配置します。これは、UIBarButtonItemから呼び出すことができる小さなプラグインモジュールのようなものです。

さて、これは現在のストーリーボードに/である可能性があります、または別のものに、それは問題ではありません。

ストーリーボード全体でセグエラインスパゲッティの可能性を嫌うので、このようにしたいです。

これがその方法です。

- (IBAction)displaySettings:(id)sender
{
    LOG_SELECTOR() // google that for extra goodness

    // FYI, this can be done using a different storyboard like so.
    /*
     NSString * storyboardName = @"MainStoryboard_iPhone"; // possibly use device idiom?
     UIStoryboard * storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil];
     */

    // To push a new set of scenes with a new Navigation Controller, it is done like this:
    UINavigationController *settingsNC = [self.storyboard instantiateViewControllerWithIdentifier:@"Settings Nav Controller"];
    OBSettingsUIViewController *settingsVC = [self.storyboard instantiateViewControllerWithIdentifier:@"Settings root"];
    [settingsNC pushViewController:settingsVC animated:NO];

    [settingsNC setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];

    // Present the view controller;
    [self presentViewController:settingsNC animated:YES completion:NULL];
}

提示されたViewController(またはNavigation Controllerのサブクラス)では、UIBarButtonItemを使用して、次のようにViewControllerの提示された階層全体を閉じることができます。

- (IBAction)dismissThisVC:(id)sender {
     [self dismissViewControllerAnimated:YES completion:nil];
}

これがたくさんの人々の助けになることを願っています。乾杯。

于 2014-06-26T19:04:37.010 に答える
4

ここに画像の説明を入力してくださいナビゲーションコントローラーを使用してviewcontrollerを呼び出すだけです。このコードをviewcontrollerに記述し、画像に設定されているようにストーリーボードにviewcontrollerを設定します。

ProfileVC *vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ProfileVC"];
[self.navigationController pushViewController:vc animated:YES];
于 2016-06-10T04:42:47.063 に答える
3

他のクラスに移動するために呼び出す

UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

UINavigationController *navController = (UINavigationController *)window.rootViewController;

DumpFeed *dump = [storyboard instantiateViewControllerWithIdentifier:@"DumpFeed"];

dump.isPushed=YES;

dump.strUserId = appDelegate.strFriendid;


[navController pushViewController:dump animated:YES];
于 2015-01-28T04:24:57.373 に答える
3

これのSwiftバージョンは次のとおりです。

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myVC = storyboard.instantiateViewControllerWithIdentifier("myStoryId")
self.presentViewController(myVC, animated: true, completion: nil)

また、ストーリーボードIDを次のように変更する必要があります。 ここに画像の説明を入力してください

于 2015-12-03T08:28:40.370 に答える
1

iOS7では、ストーリーボードを介して非常に簡単に実装できるようになったと思います

私は現在iOS7の新機能について学び、この簡単な解決策を見つけましたが、以前のバージョンでも関連していた可能性があります。よくわかりません。

最初に、提示するVCをターゲットVCに接続する必要があります(これが必要な唯一の接続です)。次に、ストーリーボードの属性インスペクター内でモーダルにするスタイルを選択し、IDインスペクターでVCにストーリーボードIDを指定し、「使用」を確認します。 storyboardID'チェックボックス、

まだ存在しない場合は、このメソッドをpresentingVCに追加します。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

   YourTargetVC * targetVC = 
         (YourTargetVC *)segue.destinationViewController;

   if(nil != targetVC) {

       //Do preparations here
   }

}

これで、presentingVCからtargetVCを表示したい場合は、次を使用できます。

[self performSegueWithIdentifier:(NSString *) sender:(id)];

ここで、識別子はviewControllerのstoryboardIDであり、送信者はアクションをトリガーしたビューです。このメソッドはストーリーボードシーンを呼び出すため、このメソッドが[prepareForSegue: sender:]呼び出され、targetViewControllerが表示される前に最後の変更を行うことができます。

于 2013-09-28T17:28:52.847 に答える