iOS - Unitighlight UITableViewCell中的UIBarButtons?

时间:2012-09-28 16:34:01

标签: ios uitableview uibarbuttonitem uitoolbar

我有一个包含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

2 个答案:

答案 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];
}