Iphone uibarbuttonite突出显示颜色

Iphone uibarbuttonite突出显示颜色,iphone,cocoa-touch,uikit,uinavigationbar,uibarbuttonitem,Iphone,Cocoa Touch,Uikit,Uinavigationbar,Uibarbuttonitem,我已经为UINavigationBar(在UINavigationController中)设置了自定义色调,这反过来又为插入到UINavigationBar中的UIBarButtonItems设置了适当的匹配颜色。但是,当我选择一个UIBarButtonItem时,按钮会(大概)变成高亮显示状态,并呈现不同的颜色,看起来有点过时,与色调不太匹配。有没有办法将此高亮显示的状态颜色更改为自定义颜色 理想情况下,我只想在uibarbuttonim上创建一个类别,更改uibarbuttonim所有实例的

我已经为
UINavigationBar
(在
UINavigationController
中)设置了自定义色调,这反过来又为插入到
UINavigationBar
中的
UIBarButtonItems
设置了适当的匹配颜色。但是,当我选择一个
UIBarButtonItem
时,按钮会(大概)变成高亮显示状态,并呈现不同的颜色,看起来有点过时,与色调不太匹配。有没有办法将此高亮显示的状态颜色更改为自定义颜色

理想情况下,我只想在
uibarbuttonim
上创建一个类别,更改
uibarbuttonim
所有实例的突出显示颜色,因为这样可以避免显式地将
uibarbuttonims
子类化,然后更改应用程序中的每个引用以使用该子类(这将很棘手,因为我正在使用一些第三方库,它们只使用
uibarbuttoneim
,我不想干扰它们的实现)


任何帮助都将不胜感激。

从我面对类似问题时的记忆来看,UINavigationBar将只采用tintColor并使uibarbuttonite颜色更暗(除非样式设置为BarStyleBlack,在这种情况下,它将使其成为暗灰色)

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

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];
如果您想尝试封装它,您可以在uibarbuttonite上创建一个工厂或自定义init方法(通过一个类别),并使用上面的代码(稍加修改)

我知道我并没有完全解决您的第二点,即仅仅用一个类别重写控件状态。我不知道在uibarbuttonite中重写什么方法来做这样的事情,但是您可以通过方法swizzling来完成您想要的事情(http://cocoadev.com/index.pl?MethodSwizzling)一旦你找到你想要交换的方法


我应该注意,我只在测试/调试时使用过swizzling。

如果您使用的是Interface Builder,请将UIButton拖放到导航栏右侧,它将作为右导航栏按钮项进入。然后,为按钮的不同状态配置不同的色调,就完成了。
在Xcode 10和Swift 4中工作。

然后如何设置所选状态?UIBarButton.selected不存在?然后如何访问UIBarButton内的UIButton?必须为uicontrol状态设置第二个图像。高亮显示,而不是选中