문제

현재 Tabbar 및 여러 ViewControllers가있는 iPhone 응용 프로그램이 있습니다. 모든 뷰는 인터페이스 빌더로 설계되었습니다. 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 클래스에서 Tabbar에 대한 포인터가 있어야합니다. 당신의 견해에는 탭 바가 없으므로 [self.tabbarcontroller selectedIndex]에서 nil을받습니다.

다른 팁

나는 그것을 가지고 있다고 생각한다. 다음을 사용하여 올바른 색인을 반환합니다.

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

응용 프로그램이 충돌 한 이유는 NSLOG 부품에서 %d 대신 %@을 사용했기 때문입니다. 나는 전에 %d를 시도했던 맹세, 이상하다 ...

인덱스는 이제 반환되었지만 한 번만 반환됩니다. 탭 섹션을 누른 후 인덱스 번호가 반환되지만 다른 섹션을 다시 탭하면 번호가 인쇄되지 않습니다. 아마도보기가 이미 한 번로드 되었기 때문일 것입니다. 이 문제를 해결할 수있는 방법이 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top