2016-04-11 22 views
0

My App navigasyon aşağıda gibidir görevden tam PresentingViewController almak için:Modal Görünüm

NavigationController ---> RootViewController --(Show Segue)-> SomeViewController --(Show Segue)-> ParentViewController (With ContainerView)

Yani, ParentViewController bir kap görünümü vardır. Bu kapsayıcı görünümü, kullanıcı seçimine bağlı olarak çalışma zamanında programlı olarak doldurulur. Yani, temelde görünümü hiyerarşi şu şekildedir:

ParentViewController (With ContainerView) ---(Embed Segue) --> ContainerViewController --(Custom Segue, for deciding which child to show at runtime) ---> FirstChildViewController/SecondChildViewController

Şimdi, bir düğme SecondChildViewController içinde dokunulduğunda kalıcı bir görünüm sergiler. Her şey yolunda, bu noktaya kadar.

Ancak, şimdi ModalViewController'ın işten çıkarılmasında SecondChildViewController'daki verileri güncellemek istiyorum.

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UINavigationController updateList]: unrecognized selector sent to instance 0x127e451b0'

Bu sorunu nasıl düzeltebilirim: Aşağıdaki hatayı alıyorum,

SecondChildViewController *secondChildVC = (SecondChildViewController *)self.presentingViewController; 
[self dismissViewControllerAnimated:YES completion: ^{ [secondChildVC updateList]; }]; 

Ama: Ben ModalViewController böyle bunu yapmaya çalışacağım? Yani, spesifik olmak gerekirse, "gerçek" presentViewController'ı nasıl alabilirim? Onun biraz garip navigasyonunu biliyorum ve kullanıcı deneyiminin bakış açısından çok fazla istifleme var, ama müşterinin uygulamak istediği şey bu.

cevap

2

Sorunuzu doğru anladıysam emin değilim. https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithProtocols/WorkingwithProtocols.html

: - Eğer ViewController B sunan bir ViewController A, varsa B kapandığında A'da bir yöntemi çağırmak istiyorsanız ve B

bir temsilci

Protokoller ve burada Delegeler hakkında daha fazlasını okuyun yapabilirsiniz

+0

Herhangi bir karışıklık için özür dilerim, ama neredeyse doğru. Protokoller/delege mekanizmasına her zaman gidebileceğimi biliyorum. Ancak, bu sorun çok nadir değildir. SecondChildViewController örneği yerine, presentViewController olarak UINavigationViewController örneğini alıyorum. PresentViewController "gerçek" bulmak için herhangi bir yolu var mı? Cevabın için teşekkürler!! –

+0

UINavigationViewController.topViewController'ı deneyin – Pankaj

+0

Nope ... bu bana ParentViewController verecek ve tekrar çocuğunu aramak zorunda kalacak. Temsilci modelini şu an itibariyle uyguladım. –

İlgili konular