编辑:这里是完整的代码示例,适用于Xcode 6.4
我有一个简单的iOS应用程序,没有故事板。 我像这样在AppDelegate.swift
中为UIWindow
设置了rootViewController
:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let tabBarController = TabBarController()
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.rootViewController = tabBarController
window?.makeKeyAndVisible()
return true
}
TabBarController
类的实现如下:
class TabBarController: UITabBarController {
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
// Next line is called after 'viewDidLoad' method
println("init(nibName: bundle:)")
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
println("viewDidLoad")
}
}
当我运行应用程序时,控制台输出如下:
viewDidLoad
init(nibName: bundle:)
这意味着在 super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
之后的代码将在 viewDidLoad
方法之后被调用! 这仅适用于从UITabBarController
继承的类。 如果您尝试使用UIViewController
作为基类,一切都很好,并且在执行init方法之后将调用viewDidLoad
。
init
中对UIViewController
的视图进行任何操作? - Petar