#ios #swift
#iOS #swift
Вопрос:
Я хочу установить RootViewController в делегате приложения..
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
var rootView: MyRootViewController = MyRootViewController()
//Code to set this viewController as the root view??
return true
}
Комментарии:
1. это буквально та же строка кода, что и в objective c
2. Да, но я не очень хорошо знаком с Objective-C.
3. Если вы используете раскадровки, вам не нужно устанавливать корневой контроллер представления. Если вы не используете раскадровки, вы должны быть.
4. @JackWu Нелепое заявление.
5. Почему язвительные отрицательные голоса?
Ответ №1:
Если вы используете раскадровку и хотите настроить свой RootViewController программно, сначала убедитесь, что ViewController имеет идентификатор раскадровки в инспекторе идентификации. Затем в AppDelegate выполните следующие действия:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// get your storyboard
let storyboard = UIStoryboard(name: "Main", bundle: nil)
// instantiate your desired ViewController
let rootController = storyboard.instantiateViewControllerWithIdentifier("MyViewController") as! UIViewController
// Because self.window is an optional you should check it's value first and assign your rootViewController
if let window = self.window {
window.rootViewController = rootController
}
return true
}
Комментарии:
1. я использую Swift 2.0, и это незначительное изменение сработало для меня в раскадровке
let rootController = storyboard.instantiateViewControllerWithIdentifier("MyViewController") as UIViewController
Ответ №2:
Вы можете сделать что-то вроде этого.
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
var rootView: MyRootViewController = MyRootViewController()
if let window = self.window{
window.rootViewController = rootView
}
return true
}
Комментарии:
1. Я только что использовал этот код в Xcode 7.1, и компилятор заявил, что, поскольку rootView никогда не изменяется, его можно сделать константой с
let
ключевым словом вместоvar
.
Ответ №3:
Swift 2.0:
var window: UIWindow?
var storyboard:UIStoryboard?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.makeKeyAndVisible()
storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootController = storyboard!.instantiateViewControllerWithIdentifier("secondVCID")
if let window = self.window {
window.rootViewController = rootController
}
Ответ №4:
Чтобы заставить его показывать, вам нужно сделать несколько вещей, если вы не используете раскадровку. Внутри AppDelegate внутри приложения-функции.
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
let frame = UIScreen.mainScreen().bounds
window = UIWindow(frame: frame)
let itemsViewControler: UITableViewController = BNRItemsViewController()
if let window = self.window{
window.rootViewController = itemsViewControler
window.makeKeyAndVisible()
}
return true
}
Комментарии:
1. хотя в ответе на раскадровку действительно указан правильный контроллер для меня, этот ответ срабатывает, но в итоге я получаю черный экран :-/
Ответ №5:
if let tabBarController = self.window!.rootViewController as? UITabBarController
{
tabBarController.selectedIndex = 0
}