2016-05-12 49 views
0

我有3個UIViewControllers說: v1ViewController v2ViewController v3ViewController。如何使用委託一個UIViewController帶來的價值沒有實例對象

我已經將v2上的控制器推送爲v1和v3上的v2。 現在我想使用委託從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

您可以使用鍵值觀察:http://nshipster.com/key-value-observing/ – henrikstroem

+0

您是否使用NSNotificationCenter觀察器嘗試過?如果它只涉及傳遞一個值可能這可能是有用的 –

+0

@AnkitaShah通知是這裏的簡單方法,但我想通過代理 – ankit

回答

0

使用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) 

希望這會有所幫助:)

+0

嘗試它會拋出錯誤'self.delegate = vc',因爲我們無法將委託分配給視圖控制器 – ankit

+0

是的,我們可以使用通知中心 – ankit

+0

我們可以同時使用。 – Sahil

相關問題