2014-04-02 16 views
15

Zajmuję się tworzeniem aplikacji opartych na UITabbar i hierarchii widoku w następujący sposób.Uzyskiwanie dostępu do UITabBarController z UIVIewController

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

muszę otworzyć UITabBarController z UIIVewController. Ale następujące właściwości zawsze zwracają zero.

self.tabBarController i self.navigationController.tabBarController

Czy istnieje sposób, aby uzyskać dostęp do TabBarController bezpośrednio od dziecka viewController bez użycia AppDelegate?

@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

to możliwe, aby po prostu korzystać z dowolnego 'self.tabBarController'' UIViewController' który jest osadzony w 'UITabBarController' sprawdzić @ Odpowiedź Rashada poniżej – nburk

Odpowiedz

23

Z hierarchię że używasz:

enter image description here

mogę połączenie bez problemu UITabBarController z ViewController z:

self.tabBarController

Najedź inicjalizacji niestandardowy do viewDidLoad lub viewDidAppear

następnie przez shure można uzyskać dostęp TabBarController z self.tabBarController

Innym sposobem, aby dotrzeć do swojego TabBarController jest:

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

Ale to jest zupełnie niepotrzebne w danym przypadku .

EDIT:

Jeśli pracujesz z XIB, to został utworzony TabBarController programowo w AppDelegate. Na pewno masz coś takiego:

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

Następnie można wywołać go w ViewController:

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

Masz rację, aby pomóc viewDidLoad. Jakiś szczególny powód, dla którego nie możemy uzyskać do niego dostępu podczas inicjowania? – rustylepord

+0

To nie działa na Xcode 7 beta 6. Czy ktoś inny może to potwierdzić? –

+0

To nie działa na XCode 9. Coś to podstawowe jest wkręcony :( – Dibzmania

3

robisz to źle.

Mam aplikację taką samą jak Twoja. Mogę uzyskać dostęp do paska zakładek od viewDidLoad.

Spróbuj tego:

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

Hope this helps .. :)

Powiązane problemy