BarButtonItem我想以编程方式突出显示,直到录制结束。 iOS的突出显示图形非常好,因此我想保留或设置该状态。
到目前为止,我发现了' setSelected'和' setHighlighted'但这些不适用于UIBarButtonItem。 关于如何解决这个问题的任何建议?提前谢谢你,Koen。
答案 0 :(得分:9)
setSelected
和setHighlighted
可以在UIControl上正常工作,但不能在UIBarButtonItems(不是UIControls)上工作。
我建议使用UIBarButtonItem的- (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics
(文档链接)方法将背景图像更改为模仿突出显示的内容。
您还可以在项目上设置自定义UIView,该项目也模仿突出显示(请参阅customView
属性)。
答案 1 :(得分:6)
如果您添加UIBarButtonItem
UIButton
支持它,您可以直接询问CustomView。
UIButton *button = (UIButton *)[self.barButtonItem customView];
[button setSelected:YES];
答案 2 :(得分:5)
如果您绝对想要使用默认图形,可以将按钮项初始化为
UIBarButtonItem *toggleButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"MyButton"
style:UIBarButtonItemStyleBordered
target:someObject
action:@selector(doSomething:)];
并用
切换toggleButtonItem.style = (toggleButtonItem.style == UIBarButtonItemStyleBordered)
? UIBarButtonItemStyleDone : UIBarButtonItemStyleBordered;
您还需要使用style属性来读取当前状态。
BOOL isSelected = (toggleButtonItem.style == UIBarButtonItemStyleDone)
答案 3 :(得分:4)
您可以创建此按钮的插座,例如btnMoreOut
,然后执行以下操作:
btnMoreOut.tintColor = [UIColor colorWithRed:0.882 green:0.722 blue:0.169 alpha:1];
我希望这会有所帮助。祝你好运:)。
答案 4 :(得分:2)
1)获取对条形按钮的引用。
2)使用style属性,根据某个状态将其分配给UIBarButtonItemStyleDone或UIBarButtonItemStylePlain。
NB。你可以通过各种方式获得国家。例如,使用NSUserDefaults,在那里保存一个键值对。拉出值,并获取一些BOOL表示来测试。然后写下这一行:
self.myButton.style = self.someState ? UIBarButtonItemStyleDone : UIBarButtonItemStylePlain;
或者默认值全部嵌套如下:
self.myButton.style = [[NSUserDefaults standardUserDefaults]
boolForKey:@"someKey"] ? UIBarButtonItemStyleDone : UIBarButtonItemStylePlain;
没有三元运算符:
if ([[NSUserDefaults standardUserDefaults]
boolForKey:@"someKey"]) {
self.myButton.style = UIBarButtonItemStyleDone;
} else {
self.myButton.style = UIBarButtonItemStylePlain;
}
答案 5 :(得分:1)
p.a.'s answer,转换为Xcode 9,Swift 4.
我们的想法是,在Swift 4中,.done
样式突出显示 - 或粗体 - 按钮文字。
以非突出显示状态初始化按钮项目:
let toggleButtonItem = UIBarButtonItem(title: "MyButton",
style: .plain,
target: self,
action: #selector(doSomething))
使用三元运算符将按钮项切换到突出显示的状态,如下所示:
toggleButtonItem.style = (toggleButtonItem.style == .plain) ?
toggleButtonItem.style = .done : toggleButtonItem.style = .plain
或者,或者用这样的常规if/else
语句来切换高亮状态:
if toggleButtonItem.style == .plain {
toggleButtonItem.style = .done
}
else {
toggleButtonItem.style = .plain
}
并设置一个布尔值来检查按钮项是否突出显示:
var isHighlighted: Bool = (toggleButtonItem.style == .done)
注意:
bordered
样式,因此我在此处使用了.plain
。它们都以未突出显示状态显示按钮项目的文本。 #selector
函数必须是@IBAction
,或者必须以@objc
为前缀,以避免“Objective-C推理”问题。例如:
@objc func doSomething() { ... }
或者,如果您已将操作连接到按钮项目:
@IBAction func doSomething() { ... }
这两个函数声明都告诉编译器他们正在使用基于Objective-C的功能。这是必需的,因为#selector
是一个幕后的Objective-C,在Swift 4中你必须说明这一点,而不是让编译器推断正如以前所做的那样
答案 6 :(得分:0)
你可以试试这个(斯威夫特):
func setupInterface(){
var myButton = UIBarButtonItem()
if (your_condition){
myButton = UIBarButtonItem(image: UIImage(named: "img_selected"), style: .Plain, target: self, action: Selector("DoSomething:"))
}
else{
myButton = UIBarButtonItem(image: UIImage(named: "img_unselected"), style: .Plain, target: self, action: Selector("DoSomething:"))
}
navigationItem.rightBarButtonItem = myButton
}
在ViewDidLoad中调用setupInterface(),在代码中调用另一个函数。
答案 7 :(得分:0)
如果您想更改标题属性(例如标题颜色),可以调用setTitleTextAttributes:forState:
对我来说,它比setTintColor:
更稳定(在展开segue推动动画期间更改色调颜色中断)。
答案 8 :(得分:-2)
您可以将两个图像用于按钮的两种状态,例如一个状态“UIControlStateNormal”,您可以将图像用于正常状态。
然后按下按钮时,设置显示按下按钮的另一个图像,然后使用UIButton的isSelected方法检查图像。
希望这对你有意义。