2012-07-16 6 views
5

application:didFinishLauchginWithOptions:에서 내 컨트롤의 기본 모양을 설정했습니다.UIBarButtonItem 모양 예외가 필요합니다

UIImage *transparentImage = [UIImage imageNamed:@"transparent.png"]; 

[[UIBarButtonItem appearance]setBackgroundImage:transparentImage 
             forState:UIControlStateNormal 
            barMetrics:UIBarMetricsDefault]; 

일반 UIBarButtonItems에 투명 평면 모양을 제공하므로이 기능이 뛰어납니다. 그러나 오른쪽 모양이없는 "빠른 모양"을 누르면 UIDocumentInteractionController에서 제공되는 버튼 I가 있습니다.

enter image description here

나는이 내가 그건 그냥 이미지입니다 수있는 유일한 barbuttonitem 믿습니다. 이 버튼을 약간의 콘트라스트를주기 위해 수정할 수있는 방법이 있나요? 원래 배경도 내 naviagationbar 배경에 대해 괜찮아 보입니다.

답변

0

나는

을 구현 결국 documentInteractionControllerWillBeginPreview, documentInteractionControllerDidEndPreview

I 오른쪽 버튼을 설정 navigationItem의 오른쪽 버튼 전무로 유지 willBegin에서

. 그렇게했기 때문에보기가 이미 표시되어 있으므로 모양을 다시 설정하면 다시 추가 할 때까지 적용되지 않습니다.

- (void)documentInteractionControllerWillBeginPreview:(UIDocumentInteractionController *)controller 
{ 
    [[UIBarButtonItem appearance] setBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
    [[UIBarButtonItem appearance] setBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; 
    [[UIBarButtonItem appearance] setBackgroundImage:nil forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 

    self.rightButton = self.navigationItem.rightBarButtonItem; 
    self.navigationItem.rightBarButtonItem = nil; 
} 

- (void)documentInteractionControllerDidEndPreview:(UIDocumentInteractionController *)controller 
{ 
    UIImage *transparentImage = [UIImage imageNamed:@"transparent.png"]; 
    [[UIBarButtonItem appearance] setBackgroundImage:transparentImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
    [[UIBarButtonItem appearance] setBackgroundImage:transparentImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; 
    [[UIBarButtonItem appearance] setBackgroundImage:transparentImage forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 

    self.navigationItem.rightBarButtonItem = self.rightButton; 
} 

완벽하지는 않지만 그보다 훨씬 낫습니다. 제시하는 컨트롤러의 rightBarButtonItem을 처리하는 방법을 알아 내면 대신 대답을 수락합니다.