我正在重新考虑,因为UITabbarController showing only first tab中的问题没有得到解答......我不明白为什么我的UITabBarController只显示第一个标签。
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.backgroundColor = UIColor.darkGray
self.window?.makeKeyAndVisible()
let tab = UITabBarController()
let v1 = VC1(nibName: "View1", bundle: nil)
let v2 = VC2(nibName: "View2", bundle: nil)
let v3 = VC3(nibName: "View3", bundle: nil)
let myViews = [v1,v2,v3]
tab.viewControllers = myViews
self.window?.rootViewController = tab
return true
}
}
VC1代码:
class VC1: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("view 1 will load")
self.title = "View 1"
// Do any additional setup after loading the view.
}
}
类VC2:
class VC1: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("view 2 will load")
self.title = "View 2"
// Do any additional setup after loading the view.
}
}
VC3:
class VC1: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("view 3 will load")
self.title = "View 3"
// Do any additional setup after loading the view.
}
}
我认为这是一种经过测试和验证的方法来创建标签但它似乎不起作用,这是结果屏幕截图
答案 0 :(得分:2)
UITabBarController使用每个视图控制器中的title
来创建屏幕上显示的标签。这里的问题是,在调用title
之前,您的视图控制器没有viewDidLoad
属性的任何值,这太晚了。
您应该在初始化期间设置title
属性; initWithNibName:bundle:
将是一个很好的地方。
答案 1 :(得分:0)
我找到了一种更清晰的方法来实现这一点,View Controller的标题是一个属性,可以在它实例化之后立即设置
所以更新后的代码如下:
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.backgroundColor = UIColor.darkGray
self.window?.makeKeyAndVisible()
let tab = UITabBarController()
let v1 = VC1(nibName: "View1", bundle: nil)
let v2 = VC2(nibName: "View2", bundle: nil)
let v3 = VC3(nibName: "View3", bundle: nil)
v1.title = "View 1"
v2.title = "View 2"
v3.title = "View 3"
let myViews = [v1,v2,v3]
tab.setViewControllers(myViews, animated: false)
self.window?.rootViewController = tab
return true
}
}
屏幕截图是: