如何将instantiateViewControllerWithIdentifier设置为全局变量?

时间:2016-01-14 07:23:11

标签: ios swift uiviewcontroller

我有两个不同的切入点:

let entryPoint: UITabBarController = mainStoryboard.instantiateViewControllerWithIdentifier("TabBarController") as! UITabBarController

let entryPoint: WelcomeController = mainStoryboard.instantiateViewControllerWithIdentifier("WelcomeController") as! WelcomeController

如何将instantiateViewControllerWithIdentifier设置为此全局entryPoint var?这对我来说很难,因为他们有两种不同的ViewController类型:UITabBarControllerViewController

所以,我想要

var entryPoint?

以后

entryPoint: UITabBarController = mainStoryboard.instantiateViewControllerWithIdentifier("TabBarController") as! UITabBarController

entryPoint: WelcomeController = mainStoryboard.instantiateViewControllerWithIdentifier("WelcomeController") as! WelcomeController

2 个答案:

答案 0 :(得分:1)

解决方案将取决于您以后打算如何使用entryPoint。

如果你没有任何特定于类的用法或者不介意一点类型转换,你总是可以将入口点声明为UIViewController:

var entryPoint:UIViewController?

swift将接受这两个赋值,因为所有类都是UIViewController的子类。

如果您想稍后使用特定属性,则需要检查变量的实际类

例如:

if let tabBarEntry = entryPoint as? UITabBarController
{
   tabBarEntry.selectedIndex = 1
} 

答案 1 :(得分:0)

这是我为应用程序采用的一种方法。

我将简要概述一下,然后提供示例代码。

您需要做的是: 在UserDefaults中保存一个值,以便以后可以获取它以确定您的入口点。

要设置UserDefaults

中的值
UserDefaults.standard.set("TabBarController", forKey: "entryPoint")

获取值

UserDefaults.standard.string(forKey: "entryPoint")

在您的代码中,您可以检查输入点为

    let entry = UserDefaults.standard.string(forKey: "entryPoint") as! String
    var entryPoint?

    if (entry == "TabBarController")
    {
        entryPoint = mainStoryboard.instantiateViewControllerWithIdentifier("TabBarController") as! UITabBarController
    }
    else
    {
        entryPoint = mainStoryboard.instantiateViewControllerWithIdentifier("WelcomeController") as! WelcomeController
    }
  

但是一旦您设置了entryPoint对象,它的类型将被设置为   UITabBarControllerWelcomeController ,并且在应用执行期间将保持不变