2013-12-16 6 views
0

하나의 ViewController에서 UIBarButtonItem의 기본값 (이미 AppDelegate에서 선언 된)을 변경해야합니다.UIBarButtonItem의 배경을 변경할 수 없습니다

UIImage *navBarItemBackground = [UIImage imageNamed:@"navbar_button_green"]; 
[[UIBarButtonItem appearance] setBackgroundImage:navBarItemBackground 
              forState:UIControlStateNormal 
               style:UIBarButtonItemStyleBordered 
              barMetrics:UIBarMetricsDefault]; 

을 그리고 버튼의 기본 배경을 복원해야 할 때 - 내의 ViewController에서 구현 :

그래서, 내 AppDelegate에 나는이

self.navigationItem.rightBarButtonItem = nil; 
UIBarButtonItem *rightBarItem = [[UIBarButtonItem alloc] initWithTitle:@"Сохранить" style:UIBarButtonItemStyleBordered target:self action:@selector(clickOnSend:)]; 
[rightBarItem setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal style:UIBarButtonItemStyleBordered barMetrics:UIBarMetricsDefault]; 
self.navigationItem.rightBarButtonItem = rightBarItem; 

그러나 나는 그것의 생각 빈 파일을 이미지로 설정하는 것이 정확하지 않습니다. 이 동작을 구현하는 더 간단한 방법이 있습니까? 감사!

답변

1

당신이 하나 또는 여러 UIViewController'sUIBarButtonItems 또는 backgroundImage을 변경하려는 경우, 당신은 당신이 사용하는 후자의 경우로 특정 UIViewController의 더 나은 변화를 것입니다. [[UIBarButtonItem appearance] setBackgroundImage:forState:style:barMetrics:];UIBarButtonItems 배경 이미지를 모두 변경하며 이는 더 좋지 않을 수 있습니다.

+0

예, 코드의 두 번째 부분은 별도의 viewController에 배치됩니다. 하지만이 버튼은 기본 iOS6 배경으로두고 나머지 모양은 배경을 배경으로 변경해야합니다. – ShurupuS

+1

@ ShurupuS 그러면 이미지 매개 변수에 nil 만 전달하면 제대로 작동합니다. – chancyWu

+0

예 - 작동합니다.이 솔루션을 사용해 보았습니다. 코드가 조금 더 단순 해 보입니다. 감사! – ShurupuS

0

당신이 당신의 코드를 변경해야합니다

UIBarButtonItem * rightBarItem = [[UIBarButtonItem alloc] 
              initWithTitle: @"Сохранить" 
              style: UIBarButtonItemStyleBordered 
              target: nil action: nil]; 
UIImage *navBarItemBackground = [[UIImage imageNamed:@"navbar_button_green"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 6)]; 
[[UIBarButtonItem appearance] setBackgroundImage:navBarItemBackground 
               forState:UIControlStateNormal 
               barMetrics:UIBarMetricsDefault]; 

[self.navigationItem setBackBarButtonItem: rightBarItem]; 
+0

하나의 viewController에 하나의 barButton 만 남겨 둘 필요가 있습니다. 다른 버튼은 모양이 바뀌어야합니다. – ShurupuS

+0

이 코드를 적용하여 모든 버툰을 변경하고 [UIBarButtonItem appearance]없이 특정 코드를 사용하여 기본값이 필요한 viewController에 지정합니다. –

관련 문제