以编程方式调用故事板场景(无需继续)?
我有一个情节故事板的场景,我想让所有其他场景都可以访问。 从故事板上的每个场景创build一个模态的segue,创造了一大堆乱七八糟的string。 有没有一种方法,我离开了赛段,并以编程方式调用场景呢?
基本上我想要做这样的事情:
MyNewViewController *myNewVC = [[MyNewViewController alloc] init]; [self presentModalViewController:myNewVC animated:YES];
除了创build和推送视图控制器类,我想要做一个模式转换到一个“孤立”(不连接到一个segue)故事板场景。
是的你可以。 做这样的事情来访问VC,然后只是莫代尔推:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; MyNewViewController *myVC = (MyNewViewController *)[storyboard instantiateViewControllerWithIdentifier:@"myViewCont"];
注意:在iOS 6中不推荐使用presentModalViewController:animated方法。
新代码应为:
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];
在故事板中给你的视图控制器一个标识符(在属性检查器下),然后使用下面的代码来推进这个观点。
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"STORYBOARDNAME" bundle:nil]; UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"VIEWCONTROLLERIDENTIFIER"]; [self presentModalViewController:vc animated:YES];
我有一个情况,我想从应用程序的主要部分呈现一个视图控制器,一个与设置&帮助等。 要做到这一点,我希望它是在一个导航控制器,一个小插件模块,我们可以从一个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,然后closures视图控制器的整个显示层次结构,如下所示:
- (IBAction)dismissThisVC:(id)sender { [self dismissViewControllerAnimated:YES completion:nil]; }
希望这可以帮助一大堆人。 干杯。
下面是一个Swift版本:
let storyboard = UIStoryboard(name: "Main", bundle: nil) let myVC = storyboard.instantiateViewControllerWithIdentifier("myStoryId") self.presentViewController(myVC, animated: true, completion: nil)
你也应该像这样改变你的故事板ID:
呼叫导航到其他课程
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];
只需使用导航控制器调用viewcontroller在viewcontroller中写入此代码,并在storyboad中设置viewcontroller,如在图像中设置。
ProfileVC *vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ProfileVC"]; [self.navigationController pushViewController:vc animated:YES];
我认为在iOS7中,通过故事板实现起来非常容易
我目前正在学习iOS7中的新function,并发现了这个简单的解决scheme,但即使在之前的版本中,它也可能是相关的,我不确定。
首先,你需要连接提出的VC和目标VC(这是唯一需要的连接),然后在故事板的属性检查器中select风格为模态,在身份检查器给你的VC一个storyboardID,并确保你检查了'使用storyboardID“checkbox,
如果不存在,则将此方法添加到您的呈现VC中:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { YourTargetVC * targetVC = (YourTargetVC *)segue.destinationViewController; if(nil != targetVC) { //Do preparations here } }
现在,当你想从演示文件VC中显示你的targetVC时,你可以使用:
[self performSegueWithIdentifier:(NSString *) sender:(id)];
其中标识符是viewController的storyboardID,sender是触发动作的视图,这个方法将调用storyboards场景,因此将会调用[prepareForSegue: sender:]
方法,让你在targetViewController出现之前进行最后的修改。
Heres Swift 3版本:
let storyboard = UIStoryboard(name: "Main", bundle: nil) let viewController = storyboard.instantiateViewController(withIdentifier: "baseViewController") self.present(viewController, animated: true, completion: nil)