2013-05-17 3 views
2

탐색 막대의 제목으로 '정보'를 제공하기 위해 UIButton으로 탐색 기반 앱을 설정하려고합니다. 제목으로 버튼을 쉽게 설정할 수는 있지만 영구적으로 (그리고 새로운 viewController가 호출 될 때마다 내비게이션 막대가 슬라이드되지 않도록) 어디에서해야 하는지를 알 수 없습니다. 여기에 내 현재 코드입니다 : - 나는 그냥 시작 설정하고 난 실제 방법에 대한 싱글 톤의를 사용하여 아무런 문제가 없습니다 (영원 할 -앱 전체에서 UINavigationBar에 UIButton 유지?

대한 명확한
AppDelegate.h 

    @class ViewController; 
@interface AppDelegate : UIResponder <UIApplicationDelegate> 
@property (strong, nonatomic) UIWindow *window; 
@property (strong, nonatomic) ViewController *viewController; 

@end 

AppDelegate.m 

    #import "AppDelegate.h" 
    #import "ViewController.h" 
    @implementation AppDelegate 

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     // Override point for customization after application launch. 
     if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
      self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; 
     } else { 
      self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; 
     } 
     UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.viewController]; 
     self.window.rootViewController = navController; 
     [self.window makeKeyAndVisible]; 
     return YES; 
    } 

ViewController.m 

    - (void)viewDidLoad 
    { 
     [super viewDidLoad]; 
     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     button.frame = CGRectMake(100, 4, 120, 36); 
     [button setImage:[UIImage imageNamed:@"logo_1.png"] forState:UIControlStateNormal]; 
     [button addTarget:self action:@selector(about) forControlEvents:UIControlEventTouchUpInside]; 
     self.navigationItem.titleView = button; 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

는 '있는 viewDidLoad'의 코드가 잘 작동 나는 그냥 그것을 다시로드하고 싶지 않아요).

나는 사이트를 파고 들었고 몇 시간 동안 꾸물 거리며이 작업을 할 수없는 것처럼 보였다. 도와 주셔서 미리 감사드립니다.

답변

0

UINavigationController 스택에 푸시 된 각 UIViewController은 자신의 UINavigationBar이므로 글로벌 버튼을 사용할 방법이 없습니다. 당신이 할 수있는 기본 클래스 viewDidLoad에있는 버튼을 설정 ViewControllers 각각에 대한 공통 기본 클래스를 만드는 것입니다.

이 접근법을 보여주기 위해 샘플 App을 만들었습니다.

https://github.com/GayleDDS/SameButtonOnAllNavBars

enter image description here

+0

당신은이 수행되는 방식에 자세히 설명해 수 있을까? naviBar가 슬라이드되지 않는 것은 가능하지 않을 수도 있지만, 그렇게하는 여러 응용 프로그램을 다시 말할 수 있습니다. 나는 그들이 ViewController를 사용하고 하나 또는 최소한의 클래스에서 각각의 뷰를 호스팅하지 않는다고 추정한다. – Ryan

+0

@ Ryan 데모를 위해 GitHub에서 샘플 앱을 만들었습니다. – GayleDDS

+0

감사합니다. 게일 - 정말 고맙습니다. 나는이 일을하는 데 아무런 문제가 없었고 실제로 많은 앱을 이미 앱에서 사용하고 있습니다. 내가 기념비적 인 것을 놓치지 않는 한, 각 클래스의 메서드를 호출하여 원하는 탐색 항목을 가져옵니다. 하지만 영구적으로/정적으로 내비게이션 막대를 위로 올려 놓을 수는 없습니까? 귀하의 코드에서 뭔가 빠졌습니까? titleItem과 rightItem 사이에 차이점이 있는데, rightItem이 머무를 수있는 동안 제목이 사라지는 이유는 무엇입니까? 다시 한번 감사드립니다. – Ryan

관련 문제