以编程方式调用故事板场景(不需要segue)?

zak*_*ces 44 xcode objective-c ios uistoryboard

我有一个模态故事板场景,我希望所有其他场景都可以访问.从我的故事板上的每个场景创建一个模态segue会产生一大堆乱七八糟的字符串.有没有办法让我离开segues并以编程方式调用场景?

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

  MyNewViewController *myNewVC = [[MyNewViewController alloc] init];
  [self presentModalViewController:myNewVC animated:YES];
Run Code Online (Sandbox Code Playgroud)

除了创建和推送视图控制器类,我想做一个模态转换到"隔离"(不与segue连接)故事板场景.

Dar*_*ren 87

是的你可以.做这样的事情来访问VC,然后只是模态推送它:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
MyNewViewController *myVC = (MyNewViewController *)[storyboard instantiateViewControllerWithIdentifier:@"myViewCont"];
Run Code Online (Sandbox Code Playgroud)


小智 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];
Run Code Online (Sandbox Code Playgroud)


Jer*_*026 19

在故事板中为视图控制器提供一个标识符(在Attributes Inspector下),然后使用以下代码将该视图转发.

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"STORYBOARDNAME" bundle:nil];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"VIEWCONTROLLERIDENTIFIER"];
[self presentModalViewController:vc animated:YES];
Run Code Online (Sandbox Code Playgroud)


Ale*_*one 6

我有一个案例,我想从应用程序的主要部分呈现视图控制器,一个具有设置和帮助等.要做到这一点,我希望它在一个导航控制器中,我们可以从UIBarButtonItem调用一个小插件模块.

现在,这可以在当前的故事板中,或者在另一个故事板中,也没关系.

我想这样做,因为我厌恶我的故事板上的segue line spaghetti的潜力.

这是怎么做的.

- (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];
}
Run Code Online (Sandbox Code Playgroud)

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

- (IBAction)dismissThisVC:(id)sender {
     [self dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

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