我有3个UIViewControllers说: v1ViewController v2ViewController v3ViewController。
我已将控制器推送到v1上的v2和v2上的v3。 现在我想使用委托将一些值从v3ViewController带回v1ViewController。 在v3Viewcontroller上我写了它:
for vc in self.navigationController!.viewControllers{
if vc is v1ViewController{
delegate?.returnFilteredImage(imageView.image!)
self.navigationController?.popToViewController(vc, animated: true)
}
}
如何使用委托,因为在v1ViewController中我没有创建v3Viewcontroller的对象;因此我无法将代表连接到自己。
那我怎么能这样做。
答案 0 :(得分:0)
1。 使用delgates
在firstviewcontroller中创建协议并实现
protocol My {
func returnFilteredImage(image: UIImage)
}
class FirstViewController: UIViewcontroller, My {
...
func returnFilteredImage(image: UIImage) {
}
}
并在您的thirdViewController中创建一个属性并将FirstViewController委托指定给它。
class ThirdViewController: UIViewController {
var delegate: My?
...
override func viewDidLoad() {
super.viewDidLoad()
for vc in self.navigationController!.viewControllers{
if vc is FirstViewController {
let vc1 = vc as! FirstViewController
self.delegate = vc1
self.delegate?.returnFilteredImage(imageView.image!)
self.navigationController?.popToViewController(vc, animated: true)
}
}
}
}
2. 使用本地通知 check here
您可以使用本地通知执行此操作
class FirstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//add observer
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.didgetImage(_:)), name: "receiveImageNotification", object: nil)
}
func didgetImage(notification: NSNotification) {
if let image = notification.userInfo?["image"] as? UIImage {
// do something with your image
}
}
}
并从第三个视图控制器,第一个通知
let imageDataDict:[String: UIImage] = ["image": image]
NSNotificationCenter.defaultCenter().postNotificationName("receiveImageNotification", object: self, userInfo: imageDataDict)
希望这会有所帮助:)