2012-05-08 3 views
6

내비게이션 컨트롤러 제목 표시 줄을 배경 이미지로 사용자 정의했지만 뒤로 버튼의 배경색을 투명하게 변경하여 그 아래의 녹색 제목 표시 줄. 나는 iOS 개발에 상당히 익숙하다. 어느 누구도 할 수있는 일을 제안 할 수 있습니까?ios 5 내비게이션 컨트롤러의 뒤로 버튼 배경을 투명하게 변경하십시오.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     UIImage *image = [UIImage imageNamed:@"greenbar.png"]; 
     [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
     // [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

    } 

    //change back button image 

} 

편집 : 여기

는 경우에 도움이, 내가 탐색 컨트롤러의 제목 표시 줄을 변경하는 데 사용에 대한 코드입니다 나는 내가 원하는 것을 얻을 관리 약간의 연구를 수행 한 후 . 다음은 뒤로 버튼의 배경 이미지를 변경하는 코드입니다.

UIImage *image1 = [UIImage imageNamed:@"back-bt.png"]; 
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image1 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

위 코드는 이미지를 탐색 컨트롤러의 모든 뒤로 버튼에 추가합니다.

+0

네비게이션 컨트롤러가 팝 오버 컨트롤러에 제공되면 솔루션이 작동하지 않습니다. 그 이유는 탐색 모음의 배경 및 백 바 버튼 항목의 배경이 Popover에서 다르게 그려지기 때문입니다. –

답변

5

기본 뒤로 단추 모양을 변경할 수는 없지만 직접 단추를 만들어 대체 할 수는 있습니다.

- (void)viewDidLoad { 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     UIImage *image = [UIImage imageNamed:@"greenbar.png"]; 
     [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
     // [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

    } 

    //change back button image 
    if(self.navigationController.viewControllers.count > 1) { 
     UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

     [backButton setTitle:@"Back" forState:UIControlStateNormal]; 
     [backButton addTarget:self action:@selector(didTapBackButton:) forControlEvents:UIControlEventTouchUpInside]; 
     backButton.frame = CGRectMake(0.0f, 0.0f, 64.0f, 41.0f); 
     UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 

     self.navigationItem.leftBarButtonItem = backButtonItem; 
    } 
} 



- (void) didTapBackButton:(id)sender { 
    if(self.navigationController.viewControllers.count > 1) { 
     [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 
+0

답변 해 주셔서 감사합니다! 그것은 일하고 있지만, 오직 하나의 깊이에 대해서만 모든보기에 대한 아니라. 그러나 다른 방법은 없다는 말입니까? 감사! –

+3

내가 아는 다른 방법이 없습니다. 이것을 모든 View Controller에 포함 시키려면'viewDidLoad' 메쏘드에서 이것을 구현하는'BaseViewController' 클래스를 생성하고 그것을 앱의 모든 뷰 컨트롤러에 대한 기본 클래스로 사용하십시오. 메인 뷰 컨트롤러에서 viewDidLoad를 오버라이드 할 때'[super viewDidLoad]'를 호출 할 때 조심하십시오. – adig

+0

감사합니다. adig! 그 도움이! –

관련 문제