44

我有一个模态故事板场景,我希望所有其他场景都可以访问它。从我的故事板上的每个场景中创建一个模态转场会导致到处乱七八糟的字符串。有没有办法让我离开转场并以编程方式调用场景?

基本上我想做这样的事情:

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

除了创建和推送视图控制器类之外,我想做一个模态转换到“隔离”(不与 segue 连接)情节提要场景。

4

8 回答 8

87

是的你可以。做这样的事情来访问 VC,然后只是 Modal Push 它:

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

注意:方法presentModalViewController:animated在 iOS 6 中已弃用。

新代码应为:

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

我有一个案例,我想从应用程序的主要部分展示一个视图控制器,一个带有设置和帮助等的视图控制器。为此,我希望它位于导航控制器中,有点像我们可以从 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];
}

在呈现的视图控制器(或导航控制器的子类)中,您可以有一个 UIBarButtonItem 来关闭视图控制器的整个呈现层次结构,如下所示:

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

希望这可以帮助一群人。干杯。

于 2014-06-26T19:04:37.010 回答
4

在此处输入图像描述只需使用导航控制器调用 viewcontroller 在 vi​​ewcontroller 中编写此代码,并在情节提要中设置 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 连接起来(这是唯一需要的连接),然后在情节提要的属性检查器中选择要模态的样式,在身份检查器中为您的 VC 提供一个情节提要并确保您选中了“使用” 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 回答