Как мне перевести мой проект с использования раскадровки на то, чтобы больше не использовать его? - PullRequest
0 голосов
/ 07 марта 2019

Если у меня есть проект Xcode, который уже использует раскадровку, и теперь я хочу переключиться на загрузку контроллера представления программно, как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Медленно. Один шаг за раз.

Раскадровки - это не все или ничего. Вы можете продолжать использовать раскадровку для мест, где это полезно, и вы можете использовать программную загрузку для мест, где это не так, и вы можете переходить между ними по одному шагу за раз.

Первый шаг, если вы хотите отмотать кусок из раскадровки, это удалить сегменты, ведущие в него и выйти из него, а затем программно загрузить этот контроллер вида из раскадровки с помощью instantiateViewController(withIdentifier:).

Затем вы можете перетащить данную сцену в отдельную раскадровку (выберите сцену, редактор, рефакторинг в раскадровку ...), чтобы она была полностью независима от всех других сцен. Затем вы можете переделать этот контроллер в программный код, не прерывая ничего в проекте. Вы также можете смешивать и сочетать здесь; загрузка контроллера представления из раскадровки, но обработка инициализации вручную в init(nibName:bundle:).

Вы также можете вырезать и вставить представление раскадровки в свой собственный файл XIB, с которым иногда легче работать, не отказываясь от системы макета GUI. Выберите вид, скопируйте, создайте новый файл XIB (в шаблонах он называется «Вид») и вставьте его. Это немного проще в использовании с init(nibName:bundle:).

Но ключевой момент - не пытаться переделать весь проект сразу. Если есть какая-то часть, в которой раскадровки вызывают проблемы, переработайте их. Если вам просто больше нравится программный код, продолжайте рефакторинг по одному шагу за раз, пока не закончите или пока не сделаете достаточно, чтобы быть счастливым.

Как отмечается в ответе Senseful, сцена верхнего уровня немного особенная. Вы можете изменить его с другими сценами или без них.

0 голосов
/ 07 марта 2019

Вот глубокая статья о том, как это сделать. TLDR:

  1. В настройках проекта очистите главный интерфейс:

enter image description here

  1. В вашем didFinishLaunching используйте код, такой как следующий:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        window = UIWindow(frame: UIScreen.main.bounds)
        let homeViewController = UIViewController()
        homeViewController.view.backgroundColor = UIColor.red
        window!.rootViewController = homeViewController
        window!.makeKeyAndVisible()
        return true
    }
    
...