2011-03-09 20 views
5

Birisi lütfen bir denetleyici denetleyicisinin hangi sekme dizinini nasıl belirleyebileceğimi söyleyin.Hangi tabbar indeksinin benim viewer denetleyicim olduğunu belirleme

basitleştirmek için - Şu anda dizinini kodlayarak bir tabBarItem öğesine atlayabilirim.

self.tabBarController.selectedIndex = 3; 

Ancak, kullanıcı sekme çubuğu öğeleri özelleştirmek gerekir, 3 numaralı bir olasılık viewController o taşındı gibi kullanıcı isteyecektir kimse değil mi. Nereye taşındığını nasıl belirleyebilirim, böylece doğru olanı seçebilirim.

Herhangi bir yardım lütfen.

sayesinde

Lee

cevap

0

Tamam, bu yüzden başarıyla cevapların hiçbirinde herhangi hiçbir şans oldu - sıralamak o kadar düşünce ama yaptım ben Yaptığım şeyi yapmaya teşebbüs eden bir başkasının olması durumunda bunu nasıl yaptığımı açıklar.

(ayrıca IB yapılabilir)

TabBarController vb emin temsilci tüm dizi yapmak ve takip olarak gerçekleştirebilir 0 ile başlayan ve 8 ile sona erdi demek etiketi atandı benim sekme çubuğu denetleyicisi üzerindeki her tabBarItem temsilci yöntemi:

- (void)tabBarController:(UITabBarController *)theTabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed { 

NSInteger count = self.tabBarController.viewControllers.count; 
NSMutableArray *tabOrderArray = [[NSMutableArray alloc] initWithCapacity:count]; 


for (UINavigationController *viewController in viewControllers) 
{ 
    NSInteger tag = viewController.tabBarItem.tag; 
    [tabOrderArray addObject:[NSNumber numberWithInteger:tag]]; 
} 

[prefs setObject:tabOrderArray forKey:@"tabOrder"]; 
[prefs synchronize]; // optional 
[tabOrderArray release]; 

}

(yani döngü dolayısıyla bu zaman app ViewControllers ontop navControllers kullanımı dikkat edin)

yüzden şimdi ben istediğim VC dizinini alabilir bir sekme çubuğu emri olmadığını, yeni bir sekme çubuğu amacıyla

NSArray * tabBarOrder = [prefs objectForKey:@"tabOrder"]; 


if(tabBarOrder) { ... } 

ile prefs bir dizi olsaydı ben sadece kontrol etmesine edildi yapabiliyor ne '[tabBarOrder indexOfObjectIdenticalTo: [NSNumber numberWithInt: theViewsTagImAfter]] ile;

ve eğer prefs'te herhangi bir dizi yoksa, taşınmamış olduğunu ve nerede olduğunu güvenli bir şekilde varsayabilirsin.

**

herhangi biri bu size daha şık bir şekilde bu başarabileceğini hissetmelisiniz yapmış nasıl yok etmek çekinmeyin. Ancak, bu çalışmalar ve diğer öneriler yoktu.

15

self.tabBarController.selectedViewController özelliğini kullanın.

GÜNCELLEME:

NSUInteger index = [self.tabBarController.viewControllers indexOfObjectIdenticalTo:specificViewController]; 
+0

Üzgünüm, yanlış anlaşıldınız ya da sorum şu an yanıltıcıdır - şu anki dizini aramıyorum, belirli bir denetleyiciye atlamaya bakıyorum. değişmiş olmalı. Daha net olan var mı? Teşekkürler ve üzgünüm. – theiOSDude

+0

'selectedViewController' özelliği bir endeksi değil, bir" UIViewController "örneğini döndürmez. Belki de hala aradığınızı anlamıyorum… –

+0

Üzgünüm, doğru - önerdiğiniz şey havalı, bir viewController seçmeme izin veriyor, böylece sıralanan tabBarItem'i seçmem gerekiyor - bu yüzden index .. – theiOSDude

1

Sen UITabBar içinde denetleyicilerin listesini almak ve işaretçi değerine göre karşılaştırabilirsiniz: kullanımı belirli viewController dizinini almak için. Örneğin, bir UITabBar olan bir görünüm denetleyicisi böyle konumu anlamaya:

int loc = 0; 
for (UIViewController *vc in [self.tabBarController viewControllers]){ 
    if (vc == self.navigationController || vc == self){ 
     break; 
    } 
    loc++; 
} 
if (loc == [[self.tabBarController viewControllers] count]) 
    NSLog(@"Could not find me!"); 
else 
    NSLog(@"Im in tab:% d",loc); 
İlgili konular