如何在 Swift 程序化 UI 上组织我的 ViewScreens
How to Organize my ViewScreens on Swift Programmatic UI
我正在学习编程 UI 并且有点痴迷于干净的代码。
我目前正在构建一个 TabBarVC,以便我可以管理我所有的 VC,但是我在执行此操作时收到一条错误消息。
import UIKit
class MainTabBarVC: UITabBarController {
let firstVC = FirstVC()
let secondVC = SecondVC()
let firstNavVC = UINavigationController(rootViewController: firstVC) // Cannot use instance member 'firstVC' within property initializer; property initializers run before 'self' is available
let secondNavVC = UINavigationController(rootViewController: secondVC) // Cannot use instance member 'secondVC' within property initializer; property initializers run before 'self' is available
let viewControllers = [firstNavVC, secondNavVC]
override func viewDidLoad() {
super.viewDidLoad()
self.setupViews()
}
func setupViews() {
// Nav Configs
self.firstVC.view.backgroundColor = .systemBackground
self.firstVC.navigationItem.title = "First Nav"
self.secondVC.view.backgroundColor = .systemBackground
self.secondVC.navigationItem.title = "Second Nav"
// Tab Configs
self.firstNavVC.tabBarItem.title = "First TAB"
self.secondNavVC.tabBarItem.title = "Second TAB"
}
}
我知道如果我将 firtNavVC、secondNavVC 和 viewcontrollers 放在 setupViews 中它会起作用,但我不喜欢它,尤其是当一个函数有太多代码行时当它变大时。
所以除了我的问题,是否有任何扩展或枚举函数可以让我轻松管理我的所有 UINavigationController、UITabBarController 和 UIViewController 比如枚举可以在我需要调用或者添加新的时候调用函数 VC.
您可以将 let
更改为 lazy var
。
class MainTabBarVC: UITabBarController {
lazy var firstVC = FirstVC()
lazy var secondVC = SecondVC()
lazy var firstNavVC = UINavigationController(rootViewController: firstVC)
lazy var secondNavVC = UINavigationController(rootViewController: secondVC)
lazy var viewControllers = [firstNavVC, secondNavVC]
override func viewDidLoad() {
super.viewDidLoad()
self.setupViews()
}
但是,我认为您维护对所有这些视图控制器的实例 属性 引用的冲动是错误的。我要做的就是将 let
移到 setupViews
中。您不需要对任何这些对象的 永久 引用;您只需要创建它们、配置它们并将视图控制器分配为您的选项卡栏控制器的子项(顺便说一下,您的代码缺少关键步骤)。
我正在学习编程 UI 并且有点痴迷于干净的代码。
我目前正在构建一个 TabBarVC,以便我可以管理我所有的 VC,但是我在执行此操作时收到一条错误消息。
import UIKit
class MainTabBarVC: UITabBarController {
let firstVC = FirstVC()
let secondVC = SecondVC()
let firstNavVC = UINavigationController(rootViewController: firstVC) // Cannot use instance member 'firstVC' within property initializer; property initializers run before 'self' is available
let secondNavVC = UINavigationController(rootViewController: secondVC) // Cannot use instance member 'secondVC' within property initializer; property initializers run before 'self' is available
let viewControllers = [firstNavVC, secondNavVC]
override func viewDidLoad() {
super.viewDidLoad()
self.setupViews()
}
func setupViews() {
// Nav Configs
self.firstVC.view.backgroundColor = .systemBackground
self.firstVC.navigationItem.title = "First Nav"
self.secondVC.view.backgroundColor = .systemBackground
self.secondVC.navigationItem.title = "Second Nav"
// Tab Configs
self.firstNavVC.tabBarItem.title = "First TAB"
self.secondNavVC.tabBarItem.title = "Second TAB"
}
}
我知道如果我将 firtNavVC、secondNavVC 和 viewcontrollers 放在 setupViews 中它会起作用,但我不喜欢它,尤其是当一个函数有太多代码行时当它变大时。
所以除了我的问题,是否有任何扩展或枚举函数可以让我轻松管理我的所有 UINavigationController、UITabBarController 和 UIViewController 比如枚举可以在我需要调用或者添加新的时候调用函数 VC.
您可以将 let
更改为 lazy var
。
class MainTabBarVC: UITabBarController {
lazy var firstVC = FirstVC()
lazy var secondVC = SecondVC()
lazy var firstNavVC = UINavigationController(rootViewController: firstVC)
lazy var secondNavVC = UINavigationController(rootViewController: secondVC)
lazy var viewControllers = [firstNavVC, secondNavVC]
override func viewDidLoad() {
super.viewDidLoad()
self.setupViews()
}
但是,我认为您维护对所有这些视图控制器的实例 属性 引用的冲动是错误的。我要做的就是将 let
移到 setupViews
中。您不需要对任何这些对象的 永久 引用;您只需要创建它们、配置它们并将视图控制器分配为您的选项卡栏控制器的子项(顺便说一下,您的代码缺少关键步骤)。