我为UINavigationBar
(UINavigationController
内)设置了自定义色调颜色,而后者又为插入{UIBarButtonItems
的{{1}}设置了合适的匹配颜色1}}。但是,当我选择UINavigationBar
时,按钮变成(大概)突出显示的状态并呈现不同的颜色,这看起来相当多,并且与色调颜色不匹配。有没有办法将这种突出显示的状态颜色更改为自定义颜色?
理想情况下,我想在UIBarButtonItem
上创建一个类别,它会更改UIBarButtonItem
所有实例的突出显示颜色,因为这样可以避免显式子类化UIBarButtonItem
然后再更改我的应用程序中的每个引用以使用子类(这将是棘手的,因为我正在使用一些只使用UIBarButtonItems
的第三方库,我不想搞乱它们的实现。)
非常感谢任何帮助。
答案 0 :(得分: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];
如果你想尝试封装它,你总是可以在UIBarButtonItem上创建工厂或自定义init方法(通过类别)并使用上面的代码(稍作修改)。
我知道我没有完全解决你用类别覆盖控制状态的第二点。我不知道在UIBarButtonItem中要覆盖哪种方法来做这样的事情,但是一旦你发现哪个方法可以通过方法调整(http://cocoadev.com/index.pl?MethodSwizzling)完成你想要的东西你要交换的方法。
我应该注意到,我只使用过调试进行测试/调试。
答案 1 :(得分:0)
如果使用的是Interface Builder,则将UIButton拖放到导航栏的右侧,它将作为导航栏右侧的按钮项进入。然后,为按钮的不同状态配置不同的色彩,然后完成。 可在Xcode 10和Swift 4中使用。