#ios #swift #rootviewcontroller
#iOS #swift #rootviewcontroller
Вопрос:
Хорошо, я следил за учебным пособием и выполнил его, все работает нормально. Однако первоначальное загружаемое представление — это 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())
Но затем я получаю эту ошибку:
Неправильная метка аргумента в вызове (есть ‘RootViewController:’, ожидается ‘coder:’)
Затем он просит меня «Исправить это», что я и делаю, что меняет строку на:
window?.rootViewController = UIViewController(coder: ViewController())
Но тогда это теперь выдает ошибку:
Не удается преобразовать значение типа ‘ViewController’ в ожидаемый тип аргумента ‘NSCoder’
Я также пробовал:
window?.rootViewController = ViewController()
но при этом симулятор становится черным.
Прояснить вопрос:
Как мне получить первое представление, которое загружается в моем приложении, типа UIViewController?
Ответ №1:
Вы должны создать подкласс UIViewController
и создать свою собственную версию, чтобы проверить, что она работает, но то, что вы делаете изначально, прекрасно
let myViewController = SomeViewController()
let navigationController = UINavigationController(rootViewController: myViewController)
window?.rootViewController = navigationController
Затем в SomeViewController
viewDidLoad
set view.backgroundColor = .red
Если вы хотите удалить панель навигации, вы можете установить для нее значение hidden
navigationController.navigationBarHidden = true
в качестве альтернативы…
let myViewController = SomeViewController()
window?.rootViewController = myViewController
Также будет работать … хотя вы должны стремиться сохранить навигационный контроллер в целом .. обычно это значительно упрощает представление контроллеров просмотра в будущем…
Причина, по которой ваш симулятор становится черным, заключается в том, что он работал … вы показываете пустой 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» в центре.
Комментарии:
1. Извините, немного новый. Что вы имеете в виду: «Вы должны создать свой собственный подкласс UIViewController и добавить в него что-то». не могли бы вы объяснить? Я уже создал новый файл типа UIViewController, который имеет «класс SomeViewController: UIViewController {»
2. В XCode перейдите в меню File -> New -> File и выберите Swift File. Затем назовите его SomeViewController.swift … затем этот файл будет доступен вам в вашем проекте… и вы можете редактировать его, как хотите.
3. В основном все, что вы хотите показать на экране в этом случае, должно быть в
SomeViewController
отображаемом представлении.4. Спасибо за ваше потрясающее и подробное объяснение. Очень признателен.
5. Пожалуйста. Я тоже добавил ярлык, чтобы лучше объяснить свою точку зрения