ビューコントローラーから現在選択されているタブのselectedIndexを取得する

StackOverflow https://stackoverflow.com/questions/1630323

質問

現在、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回ロードされているためです。これを回避する方法はありますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top