如何在不实例化对象的情况下使用委托从UIviewController中获取值

时间:2016-05-12 08:25:30

标签: swift uinavigationcontroller delegates uistoryboard

我有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的对象;因此我无法将代表连接到自己。

那我怎么能这样做。

1 个答案:

答案 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)

希望这会有所帮助:)