如何以编程方式快速使用情节提要 ID 获取当前视图控制器(当前正在呈现)?
Posted
技术标签:
【中文标题】如何以编程方式快速使用情节提要 ID 获取当前视图控制器(当前正在呈现)?【英文标题】:How to get Current viewcontroller (currently Presenting) using storyboard id in swift programmatically? 【发布时间】:2016-04-28 11:39:45 【问题描述】:**如何快速获取呈现视图控制器。我正在使用情节提要 ID。**为了展示下一个视图控制器,我该如何添加到层次结构中?
我试过这样:
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let logincontroller = mainStoryboard.instantiateViewControllerWithIdentifier("LoginViewController")
if UIApplication.sharedApplication().keyWindow?.rootViewController.presentingViewController == logincontroller
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let nextVC = mainStoryboard.instantiateViewControllerWithIdentifier(storayboardIdentifier)
self.presentViewController(nextVC, animated: true, completion: nil)
在 Appdelegate.swift 中
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
if isLoggedin == false
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = storyboard.instantiateViewControllerWithIdentifier("LoginViewController")
self.window?.rootViewController = initialViewController
self.window?.makeKeyAndVisible()
return true
else
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = storyboard.instantiateViewControllerWithIdentifier("HomeViewController")
self.window?.rootViewController = initialViewController
self.window?.makeKeyAndVisible()
return true
代码有效,它显示视图但仍然有警告
无法实例化默认视图控制器 UIMainStoryboardFile 'Main' - 也许指定的入口点是 没有设置?
【问题讨论】:
【参考方案1】:检查初始入口点。
在代码练习下方显示屏幕也是更好的方法。
let objNextViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ID_NextViewController") as? ViewController
self.presentViewController(objNextViewController, animated: true) () -> Void in
print("Achive")
已编辑:
如果您想从已经呈现的视图控制器中呈现视图控制器,请使用以下代码。
var currentViewController : UIViewController!
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
if let viewControllers = appDelegate.window?.rootViewController?.presentedViewController
self.currentViewController = viewControllers as UIViewController
else if let viewControllers = appDelegate.window?.rootViewController?.childViewControllers
self.currentViewController = viewControllers.last! as UIViewController
let objNewViewController : NewViewController!
self.currentViewController.presentViewController(objNewViewController!, animated: true, completion: () -> Void in
NSLog("Achived")
)
【讨论】:
那不会完全编译。presentViewController
不接受可选项,但 objNextViewController
在这里是可选项。此外,您可能想要as? UIViewController
(尽管不需要演员表)。
谢谢@AlessandroOrnano
我在 appdelegate 上定义的初始视图控制器取决于条件,然后我如何在存储板属性检查器上设置它。
我的问题还包括如何使用情节提要 id 获取当前呈现的视图控制器
您可以将入口点设置为导航控制器,通过appdelegate中的条件您可以将根视图控制器设置为导航控制器。检查编辑的答案。【参考方案2】:
试试这个代码presentingViewController
使用故事板名称:
let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("ViewController") as UIViewController
self.presentViewController(viewController, animated: false, completion: nil)
【讨论】:
【参考方案3】:试试这个代码,
let storyboard : UIStoryboard = UIStoryboard(name:"Main", bundle: nil)
let vc : WelcomeViewController = storyboard.instantiateViewControllerWithIdentifier("WelcomeID") as WelcomeViewController
let navigationController = UINavigationController(rootViewController: vc)
self.presentViewController(navigationController, animated: true, completion: nil)
希望对你有帮助
【讨论】:
【参考方案4】:我的猜测是您还没有为情节提要设置初始视图控制器。
要解决此问题,请打开情节提要并选择要显示为第一个的 UIViewController
。然后在Attributes inspector
选项卡(实用程序面板中右数第三个)中,查看View Controller
部分下方并确保选中Is Initial View Controller
复选框。
【讨论】:
以上是关于如何以编程方式快速使用情节提要 ID 获取当前视图控制器(当前正在呈现)?的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式使用另一个视图中的按钮从情节提要中打开 UIViewController?