我有一个包含2个UIBArButton项目的UIToolbar。工具栏位于UITableViewCell内部,当用户选择单元格时,它会淡入。问题是,当单元格突出显示时,它也会在barButtonItems上调用高亮显示,并且它们会一直保持高亮显示,直到用户手动点击按钮一次,然后它返回标准高亮显示。
有没有办法手动取消强调UIBarButtonItems?
我尝试覆盖单元格的setSelected:
和setHighlighted
方法,并尝试同时调用子视图中的setSelected:
和setHighlighted
,如下所示,似乎不起作用。高亮显示在1个UIToolbarBackground和2个UIToolbarTextButtons上调用。有什么想法吗?
@implementation CustomCell
// I also tried doing this in setHighlighted: & setHighlighted:animated
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
for (UIView *view in self.toolbar.subviews)
{
if ([view respondsToSelector:@selector(setHighLighted:)])
{
[view performSelector:@selector(setHighLighted:) withObject:[NSNumber numberWithBool:NO]];
}
}
}
@end
答案 0 :(得分:1)
您询问工具栏的子视图是否响应选择器setHighLighted:
,但实现此功能的所有UIKit类都会响应setHighlighted:
(请注意小写“l”)。这是你尝试的想法,我希望它有效!
- (void)setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
for (UIView *view in self.toolbar.subviews)
{
if ([view respondesToSelector:@selector(setHighlighted:)])
{
((UIControl *)view).highlighted = highlighted;
}
}
}
我改变了一些事情 - 只覆盖setHighlighted:
,因为动画方法应该在适当的时候调用它。
还摆脱了performSelector:支持转换为UIControl
。不是100%真实,但应该让我们编译。
希望这有帮助!
答案 1 :(得分:0)
最后让它发挥作用:
类别:
@implementation UIToolbar (Additions)
- (void)setHighlighted:(BOOL)highlighted
{
for (UIView *view in self.subviews)
{
for (UIView *subview in view.subviews)
{
if ([subview isKindOfClass:[UIButton class]])
{
((UIButton *)subview).highlighted = highlighted;
}
}
}
}
@end
细胞:
- (void)setSelected: (BOOL)selected animated: (BOOL)animated
{
[super setSelected:selected animated:animated];
[self.toolbar setHighlighted:NO];
}