UIBarButtonItem外观我需要一个例外

Tom*_*ear 5 iphone objective-c uinavigationbar uikit uiappearance

在我的application:didFinishLauchginWithOptions:设置我的控件的默认外观.

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

[[UIBarButtonItem appearance]setBackgroundImage:transparentImage 
                                       forState:UIControlStateNormal 
                                     barMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)

这对我很有用,因为它为普通的UIBarButtonItem提供了透明的平面外观.然而,UIDocumentInteractionController当你按下没有正确外观的"快速查看"时,会出现一个按钮.

在此输入图像描述

我相信这是我所拥有的唯一一个只是一个图像的barbuttonitem.有没有办法我可以修改这个按钮给它一些对比,所以它看起来不那么难看?甚至原始背景在我的naviagationbar背景下看起来还不错.

Tom*_*ear 0

我最终实现了

documentInteractionControllerWillBeginPreview、documentInteractionControllerDidEndPreview

在willBegin中我保留了右键并将navigationItem的右键设置为nil。我这样做是因为在 didEnd 中视图已经显示,因此重置外观只有在添加回来后才会生效。

- (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;
}
Run Code Online (Sandbox Code Playgroud)

它并不完美,但比以前好多了。如果有人能弄清楚如何处理呈现控制器,rightBarButtonItem我会接受你的答案。