Я хотел бы установить начальный viewcontroller из appdelegate. Я нашел действительно хороший ответ, однако он находится в Цели C, и у меня возникают проблемы с быстрым достижением того же самого.
Программно установить начальный вид контроллера с помощью раскадровки
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *viewController = // determine the initial view controller here and instantiate it with [storyboard instantiateViewControllerWithIdentifier:<storyboard id>];
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];
return YES;
}
Кто-нибудь может помочь?
Я хочу, чтобы начальный Viewcontroller зависел от определенных условий с помощью условного оператора.
Ответы:
Я использовал эту ветку, чтобы помочь мне преобразовать цель С в стремительную, и она отлично работает.
Создание и представление viewController в Swift
Swift 2 код:
Swift 3 код:
источник
UIWindow
и программно установить его корневой контроллер представления.Попробуй это. Например: вы должны использовать в
UINavigationController
качестве начального контроллера просмотра. Затем вы можете установить любой контроллер представления как root от раскадровки.Смотрите мой экран раскадровки.
источник
Для Swift 3, Swift 4:
Создание корневого контроллера представления из раскадровки:
Если вы хотите использовать
UINavigationController
от имени root:Создание корневого контроллера представления из xib:
Это почти то же самое, но вместо строк
тебе придется написать
источник
если вы не используете раскадровку, вы можете попробовать это
источник
Для новых Xcode 11.xxx и Swift 5.xx, где целью является iOS 13+.
Для новой структуры проекта AppDelegate не должен ничего делать с rootViewController.
Новый класс для обработки класса окна (UIWindowScene) -> файл 'SceneDelegate'.
источник
Вот хороший способ приблизиться к этому. Этот пример помещает контроллер навигации в качестве корневого контроллера представления и помещает выбранный контроллер представления в него внизу стека навигации, готовый к тому, чтобы вы выталкивали из него все, что вам нужно.
Чтобы этот пример работал, вы должны установить «MainViewController» в качестве идентификатора раскадровки на контроллере основного представления, а имя файла раскадровки в этом случае будет «MainStoryboard.storyboard». Я переименовываю свои раскадровки таким образом, потому что Main.storyboard для меня не является подходящим именем, особенно если вы когда-нибудь перейдете на его подкласс.
источник
я сделал это на объективной цели - с надеюсь, что это будет полезно для вас
источник
Код для Swift 4.2 и 5 кодов:
И для
Xcode 11+
and for Swift 5+
:источник
var window: UIWindow?
.And for Xcode 11+ and for Swift 5+
часть мне очень помогает. спасибо человекЯ сделал в Xcode 8 и Swift 3.0 надеюсь, что он будет полезен для вас, и он работает отлично. Используйте следующий код:
И если вы используете контроллер навигации, то используйте для этого следующий код:
источник
Свифт 4:
Добавьте эти строки в AppDelegate.swift, внутри функции didFinishLaunchingWithOptions () ...
Теперь, например, много раз мы делаем что-то подобное, когда хотим либо перевести пользователя на экран входа в систему, либо на экран начальной настройки, либо обратно на главный экран приложения и т. Д. Если вы тоже хотите сделать что-то подобное , вы можете использовать эту точку в качестве развилки для этого.
Подумай об этом. Вы можете иметь значение, хранящееся в NSUserDefaults, например, которое содержит логическое значение userLoggedIn и
if userLoggedIn == false { use this storyboard & initialViewController... } else { use this storyboard & initialViewController... }
источник
Все ответы выше / ниже дают предупреждение о том, что в раскадровке нет точек входа.
Если вы хотите иметь 2 (или более) контроллеров представления ввода, которые зависят от некоторого условия (скажем, conditionVariable ), то вам следует сделать следующее:
Используйте следующий код:
Надеюсь это поможет.
источник
Если вы не используете раскадровку. Вы можете инициализировать ваш основной контроллер вида программно.
Swift 4
А также удалить
Main
из информации о развертывании .источник
Вот полное решение в Swift 4, реализующее это в didFinishLaunchingWithOptions
написать эту функцию в любом месте внутри Appdelegate.swift
источник
На всякий случай, если вы хотите сделать это в контроллере представления, а не в делегате приложения: просто извлеките ссылку на AppDelegate в вашем контроллере представления и сбросьте его объект окна с правым контроллером представления в качестве его rootviewController.
источник
Для быстрой 4.0 .
В вашем AppDelegate.swift файл в didfinishedlaunchingWithOptions методом, поместите следующий код.
Надеюсь, это будет хорошо работать.
источник
Swift 5 & Xcode 11
Таким образом, в xCode 11 оконное решение больше не действует внутри appDelegate. Они перенесли это в SceneDelgate. Вы можете найти это в файле SceneDelgate.swift.
Вы заметите, что теперь у него есть
var window: UIWindow?
подарок.В моей ситуации я использовал TabBarController из раскадровки и хотел установить его как rootViewController.
Это мой код:
sceneDelegate.swift
Обязательно добавьте это в правильный метод сцены, как я сделал здесь. Обратите внимание, что вам нужно будет задать имя идентификатора для tabBarController или viewController, который вы используете в раскадровке.
В моем случае я делал это, чтобы установить stateController для отслеживания общих переменных в представлениях вкладок. Если вы хотите сделать то же самое, добавьте следующий код ...
StateController.swift
Примечание: просто используйте ваши собственные переменные или то, что вы пытаетесь отслеживать, вместо этого я просто перечислил мои в качестве примера в структуре tdfvariables.
В каждом представлении TabController добавьте следующую переменную-член.
Затем в тех же файлах добавьте следующее:
Это позволяет избежать единого подхода к передаче переменных между представлениями. Это позволяет легко использовать модель внедрения зависимостей, которая намного лучше в долгосрочной перспективе, чем одноэлементный подход.
источник
Отключить
Main.storyboard
Добавить раскадровку
Swift 5 и Xcode 11
простираться
UIWindow
Редактировать сгенерированный XCode
SceneDelegate.swift
источник
источник
источник
Откройте viewcontroller с помощью SWRevealViewController из делегата приложения.
источник
Для Swift 5+
источник