3

現在、タブバーと複数のビューコントローラーを備えた iPhone アプリケーションがあります。すべてのビューは Interface Builder で設計されています。ビューコントローラーから現在選択されているタブバーのインデックスを取得できるようにしたいのですが、何らかの理由でこのプロパティが (null) を返します。

ビューコントローラーの 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
4

2 に答える 2

4

appDelegate クラスにタブバーへのポインターが必要です。ビューにはタブバーがないため、[self.tabBarController selectedIndex] から nil を受け取ります。

于 2009-10-27T12:46:11.940 に答える
0

私はそれを手に入れたと思います。以下を使用すると、正しいインデックスが返されます。

  MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
NSLog(@"%d", appDelegate.tabBarController.selectedIndex);

アプリケーションがクラッシュした理由は、NSLog 部分で %d の代わりに %@ を使用したためです。%d を試したはずなのに、奇妙な...

インデックスが返されるようになりましたが、一度だけです。タブ セクションをタップするとインデックス番号が返されますが、別のセクションをもう一度タップすると番号は出力されません。おそらく、ビューが既に一度読み込まれているためです。これを回避する方法はありますか?

于 2009-10-27T16:05:07.313 に答える