0

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

2 回答 2

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% 正确,但应该让我们编译。

希望这可以帮助!

于 2012-09-28T17:30:37.660 回答
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];
}
于 2012-09-28T18:22:31.323 回答