以编程方式突出显示UIBarButtonItem

Cko*_*eny 17 cocoa uibarbuttonitem ios

在点击'record'BarButtonItem之后,我想以编程方式突出显示它,直到录制结束.iOS的突出显示图形非常好,因此我想保留或设置该状态.

到目前为止,我发现'setSelected'和'setHighlighted',但这些不适用于UIBarButtonItem.关于如何解决这个问题的任何建议?科恩,提前谢谢你.

Mic*_*ann 9

setSelected并且setHighlighted在UIControls上工作正常,但不是UIBarButtonItems(不是UIControls).

我建议使用UIBarButtonItem - (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics(文档链接)方法将背景图像更改为模仿突出显示的内容.

您还可以在项目上设置自定义UIView,该项目也模仿突出显示(请参阅customView属性).


Cam*_*mer 6

如果添加了UIBarButtonItem一个UIButton支持它,你可以索要CustomView.

带有后备UIButton的UIBarButtonItem

UIButton *button = (UIButton *)[self.barButtonItem customView];
[button setSelected:YES];
Run Code Online (Sandbox Code Playgroud)


Pat*_*ick 5

如果您绝对想要使用默认图形,则可以将按钮项初始化为

UIBarButtonItem *toggleButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"MyButton" 
                                                                     style:UIBarButtonItemStyleBordered 
                                                                    target:someObject 
                                                                    action:@selector(doSomething:)];
Run Code Online (Sandbox Code Playgroud)

并用它切换

toggleButtonItem.style = (toggleButtonItem.style == UIBarButtonItemStyleBordered) 
                         ? UIBarButtonItemStyleDone : UIBarButtonItemStyleBordered;
Run Code Online (Sandbox Code Playgroud)

您还需要使用style属性来读取当前状态.

BOOL isSelected = (toggleButtonItem.style == UIBarButtonItemStyleDone)
Run Code Online (Sandbox Code Playgroud)