如何以编程方式以模态方式呈现视图控制器?

时间:2014-01-02 22:58:16

标签: ios objective-c ios7

修改:解决此问题时,我发现从UITabBarController开始,然后通过 {{1}执行登录验证会容易得多}} AppDelegate.m方法。

问题: 此代码位于AppDelegate.m

中的didFinishLaunchingWithOptions:方法中
application didFinishLaunchingWithOptions:

只需对用户登录进行HTTP响应,然后将其带到我的TabBarController。问题是它使用推送而不是模态转换来显示页面。由于在iOS7中不推荐使用presentModalViewController方法,因此如何以编程方式强制进行模式演示?

修改

5 个答案:

答案 0 :(得分:30)

旧的presentViewController:animated:方法已被弃用,我们需要使用presentViewController:animated:completion。您现在只需要在方法中添加completion参数 - 这应该有效:

if([result isEqualToString: @"log"])
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"TabBarControl"];
    [(UINavigationController*)self.window.rootViewController presentViewController:ivc animated:NO completion:nil];
    NSLog(@"It's hitting log");
}

文档是一个很好的起点 - docs for UIViewController presentViewController:animated告诉您确切需要知道的内容:

  

presentModalViewController:动画:

     

呈现由给定视图控制器管理给用户的模态视图。 (在iOS 6.0中不推荐使用。请改用presentViewController:animated:completion:。)

- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated

答案 1 :(得分:18)

夫特

由于接受的答案是在Objective-C中,因此您将在Swift中执行此操作。但是,与接受的答案不同,这个答案没有引用导航控制器。

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "secondViewController") as! SecondViewController
self.present(secondViewController, animated: true, completion: nil)

根据需要更改故事板名称,视图控制器和ID。

另见how to dismiss a view controller programmatically

答案 2 :(得分:1)

在Swift 4.2中,您可以这样做。对于那些想要快速更新版本的人。

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "ExampleViewController")
self.present(controller, animated: true, completion: nil)

答案 3 :(得分:0)

在Swift 3/4中

     let storyB = UIStoryboard(name: "Main", bundle: nil) 
     let secondViewController = storyB.instantiateViewController(withIdentifier: "SecondViewControllerID") as! SecondViewController
     self.present(secondViewController, animated: true, completion: nil)

答案 4 :(得分:0)

 let storyB = UIStoryboard(name: "Main", bundle: nil) 
 let secondViewController = 
 storyB.instantiateViewController(withIdentifier: 
 "SecondViewControllerID") as! SecondViewController
 self.present(secondViewController, animated: true, completion: nil)

在secondViewController中使用此代码返回。

 self.dismiss(animated: true, completion: nil)