Создание нового проекта в XCode 6 не позволяет отключить раскадровки. Вы можете выбрать только Swift или Objective-C и использовать или нет Core Data.
Я попытался удалить раскадровку и из проекта удалить основную раскадровку и вручную установить окно из didFinishLaunching
В AppDelegate у меня есть это:
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow
var testNavigationController: UINavigationController
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
testNavigationController = UINavigationController()
var testViewController: UIViewController = UIViewController()
self.testNavigationController.pushViewController(testViewController, animated: false)
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window.rootViewController = testNavigationController
self.window.backgroundColor = UIColor.whiteColor()
self.window.makeKeyAndVisible()
return true
}
}
Однако XCode выдает ошибку:
Класс AppDelegate не имеет инициализаторов
Кому-нибудь это удалось?
Ответы:
Вы должны пометить
window
иtestNavigationController
переменные как опция:Классы Swift требуют инициализации необязательных свойств во время создания экземпляра:
При использовании необязательных переменных не забудьте развернуть их
!
, например:источник
AppDelegate
(если оно не имеет значения во время инициализации или не разрешается лениво). Если вы сохраняете необязательное свойство и уверены, что это не такnil
, вы «разворачиваете его из его необязательности» с помощью!
оператора.!
..white
?Все, что нужно, чтобы не использовать Раскадровки для
rootViewController
:1 · Изменить
AppDelegate.swift
на:2 · Создайте
ViewController
подклассUIViewController
:3 · Если вы создали проект из шаблона Xcode:
"Main storyboard file base name"
изInfo.plist
.Main.storyboard
.Как видно из первого фрагмента кода, вместо неявного разворачивания
if let
необязательногоwindow
свойства мне больше нравится синтаксис разворачивания необязательного свойства. Здесь я использую егоif let a = a { }
так, чтобы необязательный параметрa
стал необязательной ссылкой внутриif
оператора с тем же именем -a
.Наконец, в
self.
этом нет необходимости при ссылке наwindow
свойство внутри собственного класса.источник
if let window = window {
? Я понял! Так что не нужно использоватьwindow!
каждый раз.if let a = a {}
.makeKeyAndVisible()
чтобы быть после настройкиrootViewController
. В противном случае вы получите предупреждение о том, что в конце запуска приложения в окне должен быть корневой контроллер представления.if let a = a { }
выглядит странно. Вы уверены, что можно использовать то же имя переменной для необязательной ссылки? Apple всегда использует разные имена в своих документах Swift. Кроме того, почему это лучше, чем просто использоватьwindow!
каждый раз?if let a = a { }
совершенно нормально. Можете использовать,if let anA = a { }
если вам так удобнее. 2.window!
Это проверка во время выполнения, поскольку вы явно разворачиваете необязательный. Мне нравятся проверки времени компиляции, которые предоставляет нам Swift, так почему бы не использовать его.Если вы хотите инициализировать свой viewController с помощью xib и вам необходимо использовать контроллер навигации. Вот фрагмент кода.
источник
Попробуйте следующий код:
источник
Я нашел ответ, который не имеет ничего общего с настройкой xcode, удаление раскадровки и ссылки из проекта - это правильно. Это было связано с быстрым синтаксисом.
Код следующий:
источник
Вы можете сделать это так:
источник
Я рекомендую вам использовать контроллер и xib
MyViewController.swift
иMyViewController.xib
(Вы можете создать через File-> New-> File-> Cocoa Touch Class и установить "также создать файл XIB" true, подкласс UIViewController)
и
AppDelegate.swift
func application
напишите следующий кодНадо работать!
источник
Обновлено для Swift 3.0:
источник
Обновление: Swift 5 и iOS 13:
Info.plist
файле:SceneDelegate.swift
и изменитьfunc scene
с:к
источник
Вот полный пример быстрого теста для UINavigationController
источник
Почему бы вам просто не создать пустое приложение? раскадровка не создана для меня ...
источник
Мы можем создать приложение на основе навигации без раскадровки в Xcode 6 (iOS 8) следующим образом:
Создайте пустое приложение, выбрав язык проекта Swift.
Добавьте новые файлы классов касания какао с помощью интерфейса xib. (например, TestViewController)
В swift у нас есть только один файл, взаимодействующий с файлом xib, т.е. * .swift, файлов .h и .m нет.
Мы можем связать элементы управления xib с быстрым файлом так же, как в iOS 7.
Ниже приведены некоторые фрагменты для работы с элементами управления и Swift.
Изменения в файле AppDelegate.swift
Найдите образец кода и другую информацию на http://ashishkakkad.wordpress.com/2014/06/16/create-a-application-in-xcode-6-ios-8-without-storyborard-in-swift-language-and -работа-с-элементами управления /
источник
В iOS 13 и выше при создании нового проекта без раскадровки используйте следующие шаги:
Создать проект с использованием Xcode 11 или выше
Удалить перо раскадровки и класс
Добавить новый файл с помощью xib
Необходимо установить корневое представление как UINavigationController SceneDelegate
добавьте ниже код сцены func (_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {// Используйте этот метод, чтобы при необходимости настроить и прикрепить UIWindow
window
к предоставленному UIWindowScenescene
. // При использовании раскадровкиwindow
свойство будет автоматически инициализировано и прикреплено к сцене. // Этот делегат не подразумевает, что сцена или сеанс подключения являются новыми (см.application:configurationForConnectingSceneSession
Вместо этого). // охранник let _ = (сцена как? UIWindowScene) else {return}если пусть windowScene = сцена как? UIWindowScene {self.window = UIWindow (windowScene: windowScene) let mainController = HomeViewController () как HomeViewController let navigationController = UINavigationController (rootViewController: mainController) self.window! .RootViewController = navigationController self.window}.
источник