以下のように、UITabbarとビュー階層に基づいたアプリケーションを開発しています。
UITabBarController ----> UINavigationController ----> UIViewController
UIIVewControllerからUITabBarControllerにアクセスする必要があります。ただし、以下のプロパティは常にnilを返します。
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;
}
あなたが使っている階層で:
私はUITabBarController
からViewController
に問題なくアクセスできます:
self.tabBarController
カスタム初期化をviewDidLoad
またはviewDidAppear
に移動します
次に、shureの場合、TabBarController
にself.tabBarController
でアクセスできます。
TabBarControllerに到達する別の方法は次のとおりです。
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;
あなたはそれを誤解している。
私はあなたと同じアプリを持っています。 viewDidLoad
からタブバーにアクセスできます。
これを試して:
- (void)viewDidLoad {
[super viewDidLoad];
[self.tabBarController setSelectedIndex:1];
}
お役に立てれば.. :)