2011-12-05 2 views
0

글로벌 AppDelegate에 글로벌 오른쪽 바 버튼을 추가하여 모든 뷰 컨트롤러에이 버튼이 자동으로 표시되도록하고 싶습니다.Three20 's AppDelegate에서 글로벌 오른쪽 바 버튼 (UINavigationController)을 추가하는 방법

나는 위의 코드는 위의 코드와 working..any 문제가되지 않습니다 물론 AppDelegate에

navigator.window.rootViewController.navigationController.navigationItem.rightBarButtonItem  
= [[[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Test", @"") 
style:UIBarButtonItemStyleBordered target:self action:@selector(showTest)] autorelease]; 

에 추가?

+0

내가 아는 한 iPhone SDK의 현재 상태로는이 작업을 수행 할 수 없습니다. 보유한 각보기 컨트롤러에 해당 항목을 추가해야합니다. –

답변

7

UINavigatorController은 항상 현재 표시되어있는보기 컨트롤러의 버튼을 사용하고 상단/루트 컨트롤러는 표시하지 않으므로 사용자가 직접 할 수 있는지 잘 모르겠습니다.

당신이 할 수있는 일은 새로운 뷰 컨트롤러로 TTViewController을 서브 클래스 화하고 왼쪽 바 버튼 항목을 설정하는 것입니다.

/////////////////////////////////////////////////////////////////////////////////////////////////// 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
@implementation BaseViewController 


/////////////////////////////////////////////////////////////////////////////////////////////////// 
/////////////////////////////////////////////////////////////////////////////////////////////////// 
#pragma mark - 
#pragma mark UIViewController 



/////////////////////////////////////////////////////////////////////////////////////////////////// 
- (void)viewDidLoad { 
    [super viewDidLoad]; 


    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Test", @"") 
                      style:UIBarButtonItemStyleBordered target:self action:@selector(showTest)] autorelease]; 
} 

다음은

+0

감사합니다. 하지만 난 항상 UITabBarController 어떤 애플 리케이션에, 왜 내 UITabBarController의 viewDidLoad에 코드를 추가, 버튼을 표시 할 수 없는가 나타납니다? – Howard

+0

UITabBarController에는 탐색 모음이 없기 때문에. UINavigationController 만 탐색 줄과 탐색 모음 단추를 제공합니다. 인터페이스 빌더의 탐색 막대에 버튼 항목을 배치 할 수있는 경우에도 마찬가지입니다. 이는 단지 시뮬레이션 일 뿐이므로 앱에서 그렇게 표시되지 않습니다. 비교 : http://developer.apple.com/library/ios/#documentation/uikit/reference/UITabBarController_Class/Reference/Reference.html http://developer.apple.com/library/ios/ # documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html – rockstarberlin

4

은 무엇 당신이해야 할 것은 당신이에 후크하고자하는 탐색 컨트롤러를 활용하는 것입니다 오른쪽 탐색 막대 항목을 포함이 기본 컨트롤러에서 모든 뷰 컨트롤러를 확장해야합니다. 당신은 당신에게 이러한 이벤트를 줄 것이다 UINavigationControllerDelegate를 (각 탐색 컨트롤러가 위임 속성이 있습니다) 구현할 수 있습니다

// Called when the navigation controller shows a new top view controller via a push, pop or setting of the view controller stack. 
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated; 
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated; 

당신은

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;

를 구현 곳에서 오른쪽 버튼을 넣을 수 있습니다.

+1

이것은 서브 클래 싱을 필요로하지 않기 때문에 최상의 솔루션 인 것으로 보입니다. 이는 다양한 UIView 유형을 사용하려는 경우 제한적입니다. –

+0

앱 테마 변경시 navigationcontroller의 스타일 컨트롤러를 업데이트하는 데이 코드를 사용합니다. 굉장히 유용하다. –

+0

위의 코드를 루트 탐색 컨트롤러의 모든보기 컨트롤러에 추가 하시겠습니까? 탐색 컨트롤러의 클래스에만 코드를 추가하려고했지만 작동하지 않았습니다. –