ビューコントローラーから現在選択されているタブのselectedIndexを取得する
-
06-07-2019 - |
質問
現在、Tabbarと複数のViewControllerを備えたiPhoneアプリケーションがあります。すべてのビューは、Interface Builderで設計されています。 ViewControllerからTabbarの現在選択されているインデックスを取得できるようにしたいのですが、何らかの理由でこのプロパティが(null)を返します。
viewcontrollerのviewDidLoad関数で次を呼び出しました:
self.tabBarController.selectedIndex
これを行う正しい方法は何ですか?
AppDelegateクラスのコードで更新。
MyAppDelegate.h
#import <UIKit/UIKit.h>
@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
UIWindow *window;
UITabBarController *tabBarController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@end
MyAppDelegate.m:
#import "MyAppDelegate.h"
@implementation MyAppDelegate
@synthesize window, tabBarController;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
[window addSubview:tabBarController.view];
}
- (void)dealloc {
[tabBarController release];
[window release];
[super dealloc];
}
@end
解決
appDelegateクラスにタブバーへのポインターが必要です。ビューにはタブバーがないため、[self.tabBarController selectedIndex]からnilを受け取ります。
他のヒント
私はそれを手に入れたと思う。次を使用すると、正しいインデックスが返されます。
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
NSLog(@"%d", appDelegate.tabBarController.selectedIndex);
アプリケーションがクラッシュした理由は、NSLog部分で%dの代わりに%@を使用したためです。前に%dを試してみた、奇妙な...
インデックスが返されるようになりましたが、一度だけです。タブセクションをタップすると、インデックス番号が返されますが、別のセクションを再度タップすると、番号は印刷されません。おそらく、ビューが既に1回ロードされているためです。これを回避する方法はありますか?
所属していません StackOverflow