以编程方式设置root VC

时间:2017-06-25 09:52:57

标签: ios swift appdelegate

我是Swift初学者,所以请放轻松。我将在我的问题中具体说明。

我删除了故事板(我想学习如何使用Swift以编程方式构建UI)。

以下代码放在AppDelegate.swift

我在项目资源管理器中也有ViewController.swift。

首先,有没有办法使用UINavigationController以外的任何东西..?或者必须要有UINavigationController ..?

如果不是必须,我怎样才能将它引用到ScrollView,例如..?

2,通过对Apple自己的指南的进一步研究,他们表示我也可以使用window?.isHidden = false ...使用前一行和window?.makeKeyAndVisible()之间有区别吗?

很抱歉,如果我的问题在编程上没有意义,就像我说的那样,我是初学者,但我决定理解为什么要编写我编写或复制的代码。 谢谢。

class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        window = UIWindow(frame: UIScreen.main.bounds)
        window?.makeKeyAndVisible()
        window?.rootViewController = UINavigationController (rootViewController: ViewController())

        return true
    }

...

}

2 个答案:

答案 0 :(得分:3)

  1. 窗口需要视图控制器。它不一定是UINavigation控制器,但它确实需要是一个视图控制器。并非所有应用都以导航控制器开头。事实上,您可以通过查看Xcode在新项目中为您提供的故事板来自己看到这一点。它只是一个ViewController。你可以使用ScrollView吗?如果你把scrollview(这是一个UIView)放到UIViewController中,你一定可以。

  2. 隐藏窗口只会使其显示和消失。使其成为关键窗口意味着它将成为接收事件的窗口。您可能不认为它在iOS应用程序中很重要,但iOS应用程序可以有多个窗口。在启动应用程序的情况下,最好定义可见且关键的窗口,而不仅仅是可见的窗口。

答案 1 :(得分:2)

  

首先,有没有办法使用UINavigationController以外的任何东西..?或者必须要有UINavigationController ..?

您可以使用任何UIViewController子类作为根视图控制器。例如UITabBarControllerUIPageViewControllerUIViewControllerUITableViewController ...

  

我怎样才能将它引用到ScrollView,例如..?

您无法将UIScrollView设置为根视图控制器。但是,您可以将UIScrollView添加为UIWindow的子视图。我不建议你这样做,因为使用VC会使你的代码更易于管理,不同的类管理不同的视图。

  

使用前一行和窗口之间有区别吗?.makeKeyAndVisible()..?

是的,如果您查看makeKeyAndVisible的{​​{3}}:

  

这是一种方便的方法,用于显示当前窗口并将其放置在同一级别或更低级别的所有其他窗口的前面。如果您只想显示窗口,请更改它   isHidden属性false

所以是的,调用makeKeyAndVisible会使窗口成为“关键窗口”。

根据docs,关键窗口的行为如下:

  

键窗口接收键盘和其他非触摸相关事件。一次只有一个窗口可能是关键窗口。