如何在 Swift 中使用 TabBarController 在两个 ViewController 之间传递数据
How to pass data between two ViewControllers with TabBarController in Swift
我有一个标签栏 class(附在我的标签栏控制器上),像这样:
class CaptionTabBarController: UITabBarController, UITabBarControllerDelegate {
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
var logView = self.viewControllers![2] as CaptionsController
logView.log.append("test working!")
}
override func awakeFromNib() {
self.delegate = self;
}
}
而我的接收viewcontroller是这样的:
class CaptionsController: UIViewController {
@IBOutlet weak var captionSearchBar: UISearchBar!
@IBOutlet weak var captionsTitle: UILabel!
var receiveImage:UIImage!
var receiveCategoryText:String!
var log = [String]()
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
println(log)
}
}
当我在 CaptionTabBarController
中明确设置 logView.log
时,这有效。
我在输出 windows 中得到的结果符合预期。我单击的每个选项卡栏项目都会将 "test working!" 添加到数组中。
我的问题是:
如何使用我正在使用的 tabBarController
方法从另一个 viewcontroller class 到 CaptionsController
获取值?
这个视图是标签栏本身 "child" 的一部分,所以我假设它已经有一个实例。我发现的所有例子都只是展示了这一点,但没有展示如何从另一个 class.
获取数据
想要传递数据的UIViewController
可以存储在你的AppDelegate
class上。然后 UITabBarController
委托方法可以将其关闭并在接收 UIViewController
.
上设置属性
此外,假设您的应用程序基于选项卡控制器,您的 AppDelegate 可以通过 window?.rootViewController as UITabBarController
找到它。
我有一个标签栏 class(附在我的标签栏控制器上),像这样:
class CaptionTabBarController: UITabBarController, UITabBarControllerDelegate {
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
var logView = self.viewControllers![2] as CaptionsController
logView.log.append("test working!")
}
override func awakeFromNib() {
self.delegate = self;
}
}
而我的接收viewcontroller是这样的:
class CaptionsController: UIViewController {
@IBOutlet weak var captionSearchBar: UISearchBar!
@IBOutlet weak var captionsTitle: UILabel!
var receiveImage:UIImage!
var receiveCategoryText:String!
var log = [String]()
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
println(log)
}
}
当我在 CaptionTabBarController
中明确设置 logView.log
时,这有效。
我在输出 windows 中得到的结果符合预期。我单击的每个选项卡栏项目都会将 "test working!" 添加到数组中。
我的问题是:
如何使用我正在使用的 tabBarController
方法从另一个 viewcontroller class 到 CaptionsController
获取值?
这个视图是标签栏本身 "child" 的一部分,所以我假设它已经有一个实例。我发现的所有例子都只是展示了这一点,但没有展示如何从另一个 class.
获取数据想要传递数据的UIViewController
可以存储在你的AppDelegate
class上。然后 UITabBarController
委托方法可以将其关闭并在接收 UIViewController
.
此外,假设您的应用程序基于选项卡控制器,您的 AppDelegate 可以通过 window?.rootViewController as UITabBarController
找到它。