UIBarButtonItem突出显示颜色

Sko*_*ota 6 iphone cocoa-touch uinavigationbar uikit uibarbuttonitem

我为a UINavigationBar(在a内UINavigationController)设置了一个自定义色调颜色,UIBarButtonItems然后为插入的颜色设置了一个合适的匹配颜色UINavigationBar.然而,当我选择一个UIBarButtonItem按钮变成(大概)突出显示的状态并呈现不同的颜色,看起来相当多,并且不能很好地匹配色调颜色.有没有办法将这种突出显示的状态颜色更改为自定义颜色?

理想情况下,我想创建一个类别,在UIBarButtonItem其上更改所有实例的突出显示颜色UIBarButtonItem,因为这样可以避免显式子类化UIBarButtonItems然后更改我的应用程序中的每个引用以使用子类(这将是棘手的,因为我我正在使用一些刚刚使用的第三方库,UIBarButtonItem我不想搞乱他们的实现).

任何帮助将不胜感激.

fjl*_*fob 0

我记得遇到类似的问题时,UINavigationBar 只会采用tintColor 并使 UIBarButtonItem 的颜色变暗(除非样式设置为 BarStyleBlack,在这种情况下它会使其变成暗灰色)。

为了执行您的要求,我将创建一个自定义 UIButton,其中包含与您的配色方案相匹配的不同控件状态的背景图像,然后使用此 UIButton 作为自定义 UIBarButtonItem 的视图。

UIButton *customButton = [UIButton buttonWithType:...];

//normal_button.png and selected_button.png need to be created by you
[customButton setBackgroundImage: [UIImage imageNamed:@"normal_button.png"] forState:UIControlStateNormal];
[customButton setBackgroundImage: [UIImage imageNamed:@"selected_button.png"] forState:UIControlStateSelected];

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView: customButton];
Run Code Online (Sandbox Code Playgroud)

如果您想尝试封装它,您始终可以在 UIBarButtonItem 上创建一个工厂或自定义 init 方法(通过类别)并使用上面的代码(稍加修改)。

我知道我没有完全解决您关于仅使用类别覆盖控制状态的第二点。我不知道在 UIBarButtonItem 中重写什么方法来完成这样的事情,但是一旦您找到哪个方法,您也许可以通过方法调配(http://cocoadev.com/index.pl?MethodSwizzling)来完成您想要的事情您想要交换的方法。

我应该注意的是,我只使用过 swizzling 来进行测试/调试。