2012-04-03 3 views
3

iOS 5의 글로벌 스타일을 UIAppearance으로 설정합니다. 다음은 예입니다 : 대부분의 경우UIAppearance를 스타일링 할 때 특정 UIView를 어떻게 타겟팅합니까?

[[UIbarButtonItem appearance] 
    setTtitletextAttributes:someStyle 
    forState:UIControlStateNormal 
]; 

이 좋아 보인다 :

enter image description here

그러나 전역 스타일은 동영상 플레이어처럼, 추한 보이는 경우가 있습니다.

영화 플레이어

enter image description here

, 나는 기본 파란색 버튼을 선호한다. 그렇다면 어떻게하면 뒤로 버튼의 모양 만 타겟팅하고 완성 된 버튼의 모양을 타겟팅하지 않을까요? 정상적인 표 셀과 그룹화 된 표 셀을 대상으로하는 것과 비슷한 문제가 있습니다.

+0

플레이어가 표시되기 전과 해제 된 후에도 외장을 호출 할 수있는 방법이 있습니까? – CodaFi

+0

UIAppearence 프록시가 스타일에 영향을주지 않도록 해당 클래스에서 UIBButton을 customView로 만들려고 할 수 있습니다. –

답변

-1

프록시를 실제로 변경하여 특정보기 계층을 대상으로 지정할 수 있습니다. 즉, 사용자 정의하려는보기가 특정보기에 포함되어있는 경우 나머지보기와 모양을 다르게 수정할 수 있습니다. 따라서 먼저 글로벌 (흰색) 스타일을 설정하고 다음 방법을 호출하여 버튼이 MPMoviePlayerController 또는 그 밖의 다른 곳에 나타날 때 모양을 사용자 정의하십시오.

[[UIBarButtonItem appearanceWhenContainedIn: 
     [MPMoviePlayerController class], nil] 
     setTitletextAttributes:someStyle 
     forState:UIControlStateNormal]; 

도움이 될지 알려주세요.

+0

이 메시지와 함께 실패합니다 : *** 캐치되지 않은 예외 'NSInvalidArgumentException'로 인해 응용 프로그램을 종료합니다. 이유 : '*** MPMoviePlayerController가 UIAppearanceContainer 프로토콜을 준수하지 않습니다.' –

+0

충분합니다. 설명서를 살펴본 후에 UINavigationBar, UIButton 등의 UIAppearanceContainer 프로토콜을 실제로 준수하는 클래스를 사용해야한다는 것을 알았지 만 동일한 아이디어가 여전히 적용됩니다 –

+0

미디어 플레이어에 아이디어를 적용 할 수 없다는 점을 제외하면 . http://openradar.appspot.com/11296843을 참조하십시오. – an0

6

UINavigationBar의 사용자 지정 하위 클래스를 사용해야합니다. MyNavigationBar이라고합시다.

[[UIBarButtonItem appearanceWhenContainedIn:[MyNavigationBar class], nil] 
    setTintColor:[UIColor redColor]]; 

을하고 그것은 단지 당신의 탐색 모음이 아닌 MPMoviePlayerController의 탐색 모음에서 버튼에 영향을 미칠 것입니다 : 그럼 당신은이 작업을 수행 할 수 있습니다.

문제는 물론 UINavigationController은 코드로 만들면 항상 기본 UINavigationBar ...을 사용한다는 것입니다. 그러나 펜촉으로 만들면 펜촉의 문서 개요에있는 탐색 막대를 클릭하고 ID 속성에서 막대의 클래스를 변경할 수 있습니다.

+0

Interface Builder를 사용하지 않습니다. 내 앱 전체에서 모든 사용자 정의 하위 클래스를 사용하는 모든 navigationBar를 어떻게 만들 수 있습니까? 나는'navigationBar'를 명시 적으로'alloc '하지 않았습니다. – JoJo

+0

"UINavigationController는 코드에서 만들면 항상 기본 UINavigationBar를 사용합니다.". 이를 변경하는 공개 API는 없습니다. 내 솔루션을 사용하려면 IB와 친숙해질 필요가 있습니다. 걱정하지 마십시오. 물지 않습니다. –

+1

이 답변은 정확하며 유일한 해결 방법 인 것 같습니다. Dylan이 잘못되었으므로 원래의 Asker가 정답으로 표시해야합니다. – awolf

4

AppDelegate에 당신이 단지 전체 화면 모드에서 적절한 검은 줄이됩니다

[[UINavigationBar appearanceWhenContainedIn:[UINavigationController class], nil] 
setBackgroundImage:[UIImage imageNamed:@"navback"] forBarMetrics:UIBarMetricsDefault]; 

동영상 플레이어와

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navback"] 
            forBarMetrics:UIBarMetricsDefault]; 

를 교체합니다. iOS 5 및 iOS 6에서 작동

관련 문제