rus*_*ord 18 iphone xcode objective-c uitabbar ios
我正在开发基于UITabbar和视图层次结构的应用程序,如下所示.
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;
}
Run Code Online (Sandbox Code Playgroud)
Gab*_*ana 29
随着你正在使用的层次结构:

我可以UITabBarController从没有问题访问ViewController:
self.tabBarController
将自定义初始化移动到viewDidLoad或viewDidAppear
那么对于舒尔,您可以访问TabBarController与self.tabBarController
到达TabBarController的另一种方法是:
UITabBarController *tabBarController = (UITabBarController *)[[[UIApplication sharedApplication] delegate] window].rootViewController;
Run Code Online (Sandbox Code Playgroud)
但在你的情况下完全没有必要.
编辑:
如果您正在使用Xib,那么您已经在AppDelegate中以编程方式创建了一个TabBarController.我相信你有类似的东西:
self.tabBarController = [[UITabBarController alloc] init];
然后你可以在你的ViewController中调用它:
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]
UITabBarController *tabBarController = appdelegate.tabBarController;
Run Code Online (Sandbox Code Playgroud)
你做错了。
我有一个与您相同的应用。我可以从访问标签栏viewDidLoad。
尝试这个:
- (void)viewDidLoad {
[super viewDidLoad];
[self.tabBarController setSelectedIndex:1];
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.. :)
| 归档时间: |
|
| 查看次数: |
19462 次 |
| 最近记录: |