2013-02-13 4 views
4

내 프로젝트를 통해 프로그래밍 방식으로 을 UIBarButtonItems으로 설정하려고합니다. 나는 전화 해요 :모양 프로토콜을 통해 UIBarButtonItem의 tintColor를 어떻게 설정할 수 있습니까?

[UIBarButtonItem appearance]

그러나, 여기에 애플의 문서보고 후 : 나는 tintColor을 설정하는 그런 특성을 발견 http://developer.apple.com/library/ios/#documentation/uikit/reference/UIBarButtonItem_Class/Reference/Reference.html

. 내가 찾을 수있는 가장 가까운 관련된 방법이었다 :

setBackgroundImage:forState:barMetrics: 
setBackgroundImage:forState:style:barMetrics: 

그러나, 이러한 방법 모두 실제 배경 이미지를 설정합니다. UIAppearance을 통해 버튼의 tintColor을 간단히 설정할 수 있습니까?

답변

10

어쩌면 나는 정확하게 질문을 이해하지 못한다. 그러나 게시 한 링크를 보면 작업 -> 사용자 정의 모양 아래에 tintColor라는 속성이 있습니다.

당신은 원하는 색상

[[UIBarButtonItem appearance] setTintColor:[UIColor redColor]]; 

이 당신을 위해 작동하지 않는 경우에 해당 속성을 설정해야?

+0

버튼의 다른 스타일이나 상태를 어떻게 타겟팅합니까? 예를 들어 상태가 UIControlStateDisabled 인 버튼과 스타일 : UIBarButtonItemStyleDone은 필요한 스타일을 제공하는 메서드가없는 것처럼 보입니다. 일반적으로 완료된 버튼은 표준 막대 버튼 항목과 다른 색조입니다. –

+0

예, UIAppearance 프로토콜은 유연하지 않습니다. 대부분의 경우 appearanceWhenContainedIn : 메서드를 사용하여 특정 대상 (예 : 특정 컨트롤러 내의 특정 도구 모음)을 색조로 제공 할 수 있지만 버튼 상태에 대해 별도의 스타일이 필요한 경우 , 사용자 정의 이미지 사용을 고수해야합니다. –

+0

iOS 5 및 iOS 6 버전에서는 잘 작동하지만 iOS 7에서는 작동하지 않습니다. iOS 7에서는 예외가 발생합니다 : 'NSInvalidArgumentException' : '-setTintColor : UINavigationButton의 외양 프록시와 함께 사용할 수 없습니다.' –

4

UIAppearance 프로토콜에 따라, 당신은 아래의 tintColor을 설정할 수 있습니다

이 클래스의 인스턴스에 대한 모습을 사용자 정의하려면 컨테이너 클래스의 인스턴스에 포함 된, 또는 인스턴스 계층 구조의 경우, 당신은 즉 당신이 찾고있는 무슨 경우는, here을 언급

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] 
     setTintColor:myNavBarColor]; 

클래스의 외관 프록시를 얻을 appearanceWhenContainedIn:를 사용합니다.

+0

감사합니다. 더 명확해야합니다 - 특정 스타일에 대해 색조를 설정할 수있는 방법 : UIBarButtonItemStyleDone 또는 컨트롤 상태 : UIControlStateDisabled –

+0

UIBarButton Item에 카테고리를 작성하여 어디에서 유연성을 추가 할 수 있는지는 확실하지 않습니다. 색상 및 상태를 입력으로 받아 해당 색상에서 수동으로 UIImage를 만든 다음 메서드를 사용할 수 있습니다. - (void) setBackgroundImage : (UIImage *) backgroundImage forState : (UIControlState) state barMetrics : (UIBarMetrics) barMetrics –