ios - 在 Swift 中更改 RootViewController 类型

标签 ios swift rootviewcontroller

好的,我一直在学习教程,我已经完成了,一切正常。但是,加载的初始 View 是一个 UITableViewController,我想要一个 UIViewController。

代码如下:

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
}

我试过编辑这一行:

UINavigationController(rootViewController: ViewController())

到:

window?.rootViewController = UIViewController(rootViewController: ViewController())

但是我得到了这个错误:

Incorrect argument label in call (have 'rootViewController:', expected 'coder:')

然后它要求我“修复它”,所以我做了,这会将行更改为:

window?.rootViewController = UIViewController(coder: ViewController())

但是现在这会抛出错误:

Cannot convert value of type 'ViewController' to expected argument type 'NSCoder'

我也试过:

window?.rootViewController = ViewController()

但是这样一来,模拟器就变黑了。

澄清问题:

如何让我的应用中加载的第一个 View 成为 UIViewController 类型?

最佳答案

你应该子类化 UIViewController 并制作你自己的版本来检查它是否工作,但你最初做的是好的

let myViewController = SomeViewController()
let navigationController = UINavigationController(rootViewController: myViewController)
window?.rootViewController = navigationController

然后在 SomeViewController viewDidLoad 中设置 view.backgroundColor = .red

如果你想移除导航栏你可以将它设置为隐藏

navigationController.navigationBarHidden = true

或者……

let myViewController = SomeViewController()
window?.rootViewController = myViewController

也会工作...虽然您应该希望保持导航 Controller 的一般性..它通常会使将来呈现 View Controller 更容易...

你的模拟器变黑的原因是因为它工作......你正在显示一个空的 UIViewController......你必须制作你自己的 UIViewController 子类并添加东西

你的 View Controller 子类应该是这样的

//
//  SomeViewController.swift
//  SomeProject
//
//  Created by Magoo on 17/10/2016.
//  Copyright © 2016 Magoo. All rights reserved.
//

import UIKit

class SomeViewController: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()
        view.backgroundColor = .red

        let label = UILabel(frame:view.bounds)
        label.textColor = UIColor.whiteColor()
        label.text = "Hello world"

        view.addSubview(label)
    }
}

结果应该是一个红色屏幕,中间写着“Hello world”。

关于ios - 在 Swift 中更改 RootViewController 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40089465/

相关文章:

ios - 当我实现 Parse 时,我得到 "fatal error: unexpectedly found nil while unwrapping an Optional value"

ios - 如何仅在 userdefaults key 不存在时显示登录屏幕?

ios - Swift--读取JSON文件

ios - 将 UIImageView 添加到自定义 UIButton 类

ios - Objective-C 中的 cURL 请求 (POST)

swift - 用于将便捷构造函数添加到核心数据库中的通用函数

ios - 纵向

swift - Firestore 查询 Swift 4 的范围

swift - Root View Controller 和展开 segues?

ios - 我无法在 self.window 上使用 navigationController 推送 loginViewcontroller