访问 UINavigationController 堆栈上的根控制器的属性
Accessing properties of the root controller on a UINavigationController stack
我有一个带有根 HomeViewController() 的 UINavigationController
。 HomeViewController 有一个名为 someString 的 属性。我想从另一个以编程方式推送到导航堆栈的视图控制器访问 someString:
navigationController?.pushViewController(DetailViewController(), animated: true)
在想要访问 someString 的 DetailViewController 中,我正在这样做:
var homeViewController: HomeViewController!
override func viewDidLoad() {
super.viewDidLoad()
let navController = self.navigationController!
homeViewController = navController.viewControllers.first as? HomeViewController
}
然后从 DetailViewController 中获取 someString 的值:
var stringFromRoot = homeViewController.someString
这是访问 UINavigationController 中根视图控制器属性的正确方法吗?它在我的测试中确实有效,但是如果它有错误或缺点,或者是否有更好的方法,我想知道。
这是我所知道的在 UINavigationController
中访问根视图控制器的唯一方法。您询问了缺点,所以这是一个:
您可以使用 setViewControllers(_:, animated:)
即时更改导航控制器的视图控制器,因此假设根视图控制器始终为 HomeViewController
[=15 可能不是一个好的长期策略=]
您似乎正在将导航控制器用作单例来存储和检索常量。除非 someString
依赖于导航控制器中的某些值,否则将其提取到某种 Constants
结构中会更易于维护。
self.navigationController!.viewControllers
这会将视图控制器数组添加到导航堆栈中,您可以遍历它并访问任何 ViewController 属性
来自它。
我有一个带有根 HomeViewController() 的 UINavigationController
。 HomeViewController 有一个名为 someString 的 属性。我想从另一个以编程方式推送到导航堆栈的视图控制器访问 someString:
navigationController?.pushViewController(DetailViewController(), animated: true)
在想要访问 someString 的 DetailViewController 中,我正在这样做:
var homeViewController: HomeViewController!
override func viewDidLoad() {
super.viewDidLoad()
let navController = self.navigationController!
homeViewController = navController.viewControllers.first as? HomeViewController
}
然后从 DetailViewController 中获取 someString 的值:
var stringFromRoot = homeViewController.someString
这是访问 UINavigationController 中根视图控制器属性的正确方法吗?它在我的测试中确实有效,但是如果它有错误或缺点,或者是否有更好的方法,我想知道。
这是我所知道的在 UINavigationController
中访问根视图控制器的唯一方法。您询问了缺点,所以这是一个:
您可以使用 setViewControllers(_:, animated:)
即时更改导航控制器的视图控制器,因此假设根视图控制器始终为 HomeViewController
[=15 可能不是一个好的长期策略=]
您似乎正在将导航控制器用作单例来存储和检索常量。除非 someString
依赖于导航控制器中的某些值,否则将其提取到某种 Constants
结构中会更易于维护。
self.navigationController!.viewControllers
这会将视图控制器数组添加到导航堆栈中,您可以遍历它并访问任何 ViewController 属性 来自它。