2014-04-02 90 views
15

我正在开发一个基于UITabbar和视图层次结构的应用程序,如下所示。从UIVIewController访问UITabBarController

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

我需要从UIIVewController访问的UITabBarController。但以下属性总是返回nil。

self.tabBarController和self.navigationController.tabBarController

有没有直接从孩子的viewController访问Tabbarcontroller不使用的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

它可能只使用'从嵌入在'UITabBarController'任何'UIViewController' self.tabBarController',检查@ Rashad的回答低于 – nburk

回答

23

利用层次结构所使用:

enter image description here

我可以不存取权限问题UITabBarControllerViewController有:

self.tabBarController

将您的自定义初始化viewDidLoadviewDidAppear

那么对于舒尔你可以用self.tabBarController

另一种方式访问​​TabBarController到到达您的TabBarController是:

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

但它是你的情况完全没有必要。

编辑:

如果你用XIB1工作,那么你已经在你的AppDelegate创造了一个TabBarController编程。我相信你有这样的:

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

然后,你可以把它在你的ViewController:

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

您正在向ViewDidLoad提供帮助。初始化期间我们无法访问它的任何特定原因? – rustylepord

+0

这不适用于Xcode 7测试版6.任何人都可以证实这一点吗? –

+0

这不适用于xCode 9.这个基本的东西被搞砸了:( – Dibzmania

3

你做错了。

我有一个应用程序与你的相同。我可以从viewDidLoad访问tabbar。

试试这个:

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

希望这有助于.. :)

相关问题