2016-05-12 3 views
0

私は3つのUIViewControllerを持っています: v1ViewController v2ViewController v3ViewController。オブジェクトをインスタンス化せずにデリゲートを使用してUIviewControllerから値を取得する方法

コントローラをv1でv2、v3でv2にプッシュしました。 これで、デリゲートを使用してv3ViewControllerからv1ViewControllerに価値を戻したいと思います。 v3Viewcontrollerオン は、私はそれを書いた:v1ViewControllerに私はv3Viewcontrollerのオブジェクトを作成していないので、

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

     } 

は、どのように私は、デリゲートを使用することができます。私は代理人を自己に接続できません。

どうすればいいですか?

+0

キー値観測を使用することができます。http://nshipster.com/key-value-observing/ – henrikstroem

+0

NSNotificationCenterオブザーバで試しましたか?値を渡すことにのみ関連する場合は、これは便利かもしれません –

+0

@AnkitaShah通知は簡単な方法ですが、委任を試してみたい – ankit

答えて

0

1.使用delgates

はプロトコルを作成し、プロパティを作成し、あなたのfirstviewcontroller

protocol My { 
func returnFilteredImage(image: UIImage) 
} 

class FirstViewController: UIViewcontroller, My { 

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

} 

にし、あなたのthirdViewControllerに実装し、これにFirstViewControllerデリゲートを割り当てます。ローカル通知あなたはローカル通知

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

} 

と3番目のビューコントローラから

を使用してこれを行うことができます check here

、最初の通知を使用して

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.

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


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

これは役に立ちます:)

+0

コントローラを表示するために代理人を割り当てることができないので、エラー 'self.delegate = vc'をスローします – ankit

+0

はい、私たちはそれに通知センターを使用することができます – ankit

+0

我々は両方を使用することができます。 – Sahil

関連する問題