2010-07-06 38 views
8

olan ve UITabBarController görüntüyü içeren bir uygulamaya sahibim. Bu UITabBarController, biri UIViewController, EventInformationViewController örneğinin gösterildiği dört sekme içerir. Bu özel görünüm denetleyicisindeki bir düğme sırasıyla başka bir özel görünüm denetleyicisini EventRatingAddViewController görüntüye iter. Bu görünüm denetleyicisindeki bir eylem, EventInformationViewController örneğinde bir yöntemi çağırmalıdır. Aşağıdaki kod yerine uygulama kazasında yapar:Görünür görünüm denetleyicisine itilen görünüm denetleyicisine gidin

// get the index of the visible VC on the stack 
int myIindex = [self.navigationController.viewControllers indexOfObject:self.navigationController.visibleViewController]; 
// get a reference to the previous VC 
EventInformationViewController *prevVC = (EventInformationViewController *)[self.navigationController.viewControllers objectAtIndex:myIindex - 1]; 
[prevVC performSelector:@selector(rateCurrentEvent:)]; 

Ben viewControllers mülkiyet navigasyon yığını üzerindeki tüm VC bir dizi devam düşünce, böylece endeks şu anda görünür bir eksi bir itti VC işaret etmelidir Şu anda görünür VC görünümünde. Aksine, benim UITabBarController işaret edecek görünüyor:

-[UITabBarController rateCurrentEvent:]: unrecognized selector sent to instance 

alana ne olduğunu ve daha da önemlisi, nasıl görünümüne öğe hâlihazırda VC itti VC için bir işaretçi alabilirim?

DÜZENLEME: EventRatingAddViewController için bir delege protokolü oluşturup delege olarak EventInformationViewController'u atadım. Bu iyi çalışıyor - hala navigasyon yığını üzerinden itme VC erişmek için bir yol olmalı diye düşünüyorum.

+1

Sorunuza bir cevap değil, ama '.visibleViewController' yerine' .topViewController' yerine kullanmalısınız, çünkü ikincisi navigasyon kontrolör yığınınızla hiçbir ilgisi olmayan bir moda sunulan görünüm denetleyicisi olabilir! –

+0

'myIindex' günlüğünü ve bu UITabBarController dizinini kaydetmeyi denediniz mi? –

+0

topViewController hakkında iyi bir nokta. Uygulamamda model VC'ler olmadığı için bu durumda bir fark yaratmıyor. Görünen VC, endeksi 2, UITabBarController 1'i alır. – mvexel

cevap

6

Bunun UITabBarController gerçekten geçerli görünüm denetleyicisi ittin eminim, ama bu ne aradığınız bu UITabBarController 'ler sekmelerden birine en UITabBarController görünür oldu görünümü denetleyicisi görüntüle kontrolörü olan Bu UITabBarController zamanı, görüntü denetleyicinizi gezinti yığınının üzerine itti. Muhtemelen bu UITabBarController, görünüm denetleyicinizi yığının üzerine bastı, çünkü bunun görünebilir sekmenin görünüm denetleyicisi tarafından yapılması istendi, bu nedenle böyle bir şey olurdu: [self.tabBarController.navigationController pushViewController:someViewController];.

// get the index of the visible VC on the stack 
int currentVCIndex = [self.navigationController.viewControllers indexOfObject:self.navigationController.topViewController]; 
// get a reference to the previous VC 
UITabBarController *prevVC = (UITabBarController *)[self.navigationController.viewControllers objectAtIndex:currentVCIndex - 1]; 
// get the VC shown by the previous VC 
EventInformationViewController *prevShownVC = (EventInformationViewController *)prevVC.selectedViewController; 
[prevShownVC performSelector:@selector(rateCurrentEvent:)]; 
:

yolu nedir o böyle bir şey neden olacaktır, bu yüzden .selectedViewController özelliğini kullanmaktır, kontrolör görüşünüz denetleyici yığın itildi anda UITabBarController gösterildi görüntülemek öğrenmek için

İlgili konular