0

I have 3 UIViewControllers say: v1ViewController v2ViewController v3ViewController.

I have pushed controllers as v2 on v1 and v3 on v2. Now I want to bring some value back to v1ViewController from v3ViewController using delegates. On v3Viewcontroller I wrote it:

for vc in self.navigationController!.viewControllers{
            if vc is v1ViewController{
                delegate?.returnFilteredImage(imageView.image!)
                self.navigationController?.popToViewController(vc, animated: true)
            }

        }

How can I use delegates because in v1ViewController I haven't create object of v3Viewcontroller; consequently I cannot connect delegate to self.

So how can i do that.

ankit
  • 3,537
  • 1
  • 16
  • 32

1 Answers1

0

1. Using delgates

create a protocol and implement in your firstviewcontroller

 protocol My {
 func returnFilteredImage(image: UIImage)
} 

 class FirstViewController: UIViewcontroller, My {

  ...
  func returnFilteredImage(image: UIImage) {
 }

}

and in your thirdViewController create a property and assign FirstViewController delegate to this.

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. Using local notifications check here

You can do this using local notifications

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
 }
}

}

and from third view controller, first notification

let imageDataDict:[String: UIImage] = ["image": image]


NSNotificationCenter.defaultCenter().postNotificationName("receiveImageNotification", object: self, userInfo: imageDataDict)

Hope this helps :)

Community
  • 1
  • 1
Sahil
  • 9,096
  • 3
  • 25
  • 29