2014-04-02 17 views
15

मैं यूआईटीएबर और दृश्य पदानुक्रम के आधार पर एक आवेदन विकसित कर रहा हूं।UIVIewController से UITabBarController तक पहुंच

UITabBarController ----> UINavigationController ----> UIViewController

मैं UIIVewController से UITabBarController का उपयोग करने की जरूरत है। लेकिन निम्नलिखित गुण हमेशा शून्य लौटते हैं।

self.tabBarController और self.navigationController.tabBarController

वहाँ AppDelegate का उपयोग किए बिना एक बच्चे ViewController से सीधे TabBarController पहुंचने का एक तरीका है?

@implementation HomeViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     self.title = @"Home"; 
     self.navigationItem.title = @"Home"; 

     self.tabBarItem.image = [UIImage imageNamed:@"TabBarHome"]; 

     UITabBarController *tab = self.tabBarController; 
     UITabBarController *tab1 = self.navigationController.tabBarController; 
     UITabBarController *tab2 = self.navigationController.presentingViewController; 



    } 
    return self; 
} 
+1

यह सिर्फ किसी भी 'UIViewController' कि' UITabBarController' में अंतर्निहित है से self.tabBarController' उपयोग करने के लिए ', जाँच संभव है @ – nburk

उत्तर

23
पदानुक्रम के साथ

प्रयोग कर रहे हैं कि:

enter image description here

मैं समस्या के बिना acces UITabBarControllerViewController साथ से:

self.tabBarController

आप self.tabBarController

एक और तरीका है के साथ TabBarController उपयोग कर सकते हैं अपने TabBarController के लिए आने के लिए shure के लिए viewDidLoad या viewDidAppear

तो आपके कस्टम आरंभीकरण ले जाएँ है:

UITabBarController *tabBarController = (UITabBarController *)[[[UIApplication sharedApplication] delegate] window].rootViewController; 

लेकिन यह आपके मामले में पूरी तरह से अनावश्यक है ।

संपादित करें:

आप xib साथ काम कर रहे हैं, तो आप अपने AppDelegate में एक TabBarController बना दिया गया है प्रोग्राम के रूप में। मुझे यकीन है कि आपके पास कुछ ऐसा है:

self.tabBarController = [[UITabBarController alloc] init];

तो फिर आप अपने ViewController में यह कॉल कर सकते हैं:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate] 
UITabBarController *tabBarController = appdelegate.tabBarController; 
+1

से नीचे रशद का जवाब आप सही देखने के लिए आगे बढ़ रहे हैं डिडलोड ने मदद की। किसी भी विशेष कारण से हम प्रारंभिकरण के दौरान इसका उपयोग क्यों नहीं कर सकते? – rustylepord

+0

यह एक्सकोड 7 बीटा 6 पर काम नहीं करता है। क्या कोई और इस काम की पुष्टि कर सकता है? –

+0

यह xCode 9 पर काम नहीं करता है। कुछ मूल यह खराब है :( – Dibzmania

3

आप गलत कर रहे हैं।

मेरे पास एक ऐप जैसा ही है। मैं viewDidLoad से टैबबार तक पहुंच सकता हूं।

इस प्रयास करें:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self.tabBarController setSelectedIndex:1]; 
} 

आशा इस मदद करता है .. :)

संबंधित मुद्दे