我最近将应用程序从单个控制器转换为UITabBar
应用程序。在这个应用程序中,我需要将数据从tab1-ViewController
传递到tab2-ViewController
,我以前通过委派来完成,但现在通过从tab2中的tab1访问属性并直接在那里设置它来实现它的方式。
这被认为是一种不好的做法吗?如果是,在UITabBarController应用程序中的选项卡之间传递数据的最常用方法是什么?
这是代码......
class Tab1ViewController: UIViewController{
var name:String = ""
override func viewDidLoad() {
super.viewDidLoad()
/// Do something with name
}
}
class Tab2ViewController: UIViewController{
override func viewDidLoad() {
let tab1VC = self.tabBarController?.viewControllers?[0] as! Tab1ViewController
tab1VC.name = "John"
}
}
答案 0 :(得分:1)
你可以继承UITabBarController.It很容易从多个视图控制器访问
但正如我的快速研究@Woodster says
请记住,当您在Swift中传递数组时,您正在传递它 按值,与Objective-C不同,后者通过引用传递它。这意味着 您的第二个视图控制器所做的更改将不会反映出来 你的第一个视图控制器,因为你的第二个是使用副本 数组,不是同一个数组。如果你想要两个视图控制器 修改相同的数组,将数组放在一个类中,并传递一个 该类的实例。
据我所知,代码中的不良做法是直接展开值。如下所示
let tab1VC = self.tabBarController?.viewControllers?[0] as! Tab1ViewController
答案 1 :(得分:1)
我认为代表是最好的方式。直接设置这样的属性时需要小心。由于您强制解包控制器,因此当控制器为空时它将会中断。在选项卡控制器中,如果默认显示tab2,则除非单击它,否则tab1将为空。
除此之外,如果您只想传递属性,我认为可以通过这种方式传递它。只需使用if let
即可确保您的代码至少不会崩溃。