0

2 つの UIBArButton アイテムを含む UIToolbar があります。ツールバーは UITableViewCell 内にあり、ユーザーがセルを選択するとフェードインします。問題は、セルが強調表示されると、barButtonItems の強調表示も呼び出され、ユーザーが手動でボタンを 1 回タップするまで強調表示されたままになり、その後標準の強調表示に戻ることです。

UIBarButtonItems を手動でハイライト解除する方法はありますか?

setSelected:以下に示すように、セルとsetHighlightedメソッドのオーバーライドを試み、サブビューでも両方setSelected:setHighlightedを呼び出してみましたが、うまくいかないようです。Highlighted は 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 に答える