2

これを再現するには、カスタム AccessoriesViews (UITableViewCell の他の部分に触れると別のアクションを実行する特定のアクションを実行するボタンなど) を含むセルを含む UITableView を作成します。

UITableView をタッチ (選択) すると、AccessoryView にも (タッチされたと思われる) 選択が表示されます。これを防ぎ、実際に AccessoriesView に触れたときに、AccessoryView の選択状態のみを表示したいと考えています。

前もって感謝します、

グルーミング

4

4 に答える 4

5

UIButton が UITableViewCell の accessoriesView として設定されている場合、スーパービュー (UITableViewCell) が選択されると、accessoryView (この場合は UIButton) に対して setHighlighted が呼び出されます。

これを修正するには、UIButton をサブクラス化し、その setHighlighted セッターをオーバーライドして、スーパービューが isSelected または isHighlighted であるかどうかを無視する必要があります。

AccessoriesViewUIButton.m

#import "AccessoryViewUIButton.h"


@implementation AccessoryViewUIButton

// Subclass only works for buttonWithType:custom

- (id)initWithFrame:(CGRect)aRect
{
    // Call the superclass's designated initializer 
    self = [super initWithFrame:aRect];

    return self;
}

- (void)setHighlighted:(BOOL)isHighlighted {

    /* Overridden to do nothing if superview is selected or highlighted */

    UITableViewCell* theCell = (UITableViewCell*) self.superview;

    if ([self.superview isKindOfClass:[UITableViewCell class]]) {
        if ([theCell isSelected] || [theCell isHighlighted])
            return;
    }

    [super setHighlighted:isHighlighted];
}

- (void)dealloc {
    [super dealloc];
}


@end
于 2011-02-08T04:22:33.283 に答える
2

カスタムUITableViewCellサブクラスを使用していますか? 私はそうして setSelected:(BOOL)selected、そのクラスをオーバーライドして、あなたが望むように物事が処理されるようにします。

于 2010-12-23T17:51:58.703 に答える
0

テーブルセルをタップすると、アクセサリビューが光ったり、選択範囲が表示されたりしませんでした。tableViewCellの青色の選択状態がaccessoryViewsの背景に表示されないようにしたいと思います。あれは正しいですか?

独自のカスタムtableViewCellを作成し、セルのselectionStyleをに設定し UITableViewCellSelectionStyleNone、tableRowSelectionをsetSelected状態に処理して、アクセサリビューではなくセル側のみを使用することをお勧めします。

または、アクセサリビューの背景を少し大きくして、backgroundColorをclearColorに設定しないでください。そうすれば、セルの選択状態はaccessoryViewにも表示されません。

于 2010-12-24T09:46:57.950 に答える
0

テーブル ビュー セルをサブクラス化し、次のメソッドをオーバーライドします。

- (void) setHighlighted: (BOOL) highlighted;
- (void) setHighlighted: (BOOL) highlighted
               animated: (BOOL) animated;
- (void) setSelected: (BOOL) selected;
- (void) setSelected: (BOOL) selected
            animated: (BOOL) animated;

スーパークラスメソッドを呼び出した後、ボタンselected highlighted状態がリセットされていることを確認してください。NO

于 2012-09-18T02:36:54.947 に答える