web-dev-qa-db-ja.com

カスタムUITableViewCell選択スタイル?

UITableViewCellをクリックすると、セルをクリックすると、背景部分(背景画像がカバーしていない領域)が青色に変わります。また、セル上のUILabelsをクリックすると、すべてが白に変わります。

しかし、私が望んでいないのは、クリックしたときに青い背景ですが、selectionstylenoneを実行すると、セル内のUILabelsの強調表示された色が失われます。

セルがクリックされたときに青色の背景を取り除くだけで、UILabelsの強調表示された色を維持する方法はありますか?

78
SimplyKiwi

これは次のように実行できます。テーブルセルの選択スタイルをUITableViewCellSelectionStyleNoneに設定します。これにより、青い背景の強調表示が削除されます。次に、デフォルトのUITableViewCellクラスを使用する代わりに、テキストラベルの強調表示を希望どおりに機能させるために、UITableViewCellのサブクラスを作成し、ラベルを設定する独自の実装でsetHighlighted:animatedのデフォルト実装をオーバーライドします強調表示された状態に応じて、好きな色に変更できます。

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
    if (highlighted) {
        self.textLabel.textColor = [UIColor whiteColor];
    } else {
        self.textLabel.textColor = [UIColor blackColor];
    }
}
168
jonkroll

IOS7より前に作業している場合は、セル選択スタイルをなしにします

cell.selectionStyle = UITableViewCellSelectionStyleNone;

それ以外の場合は、UITableViewCellSelectionStyleDefaultのままにしておきます

次に:

UIView *selectedView = [[UIView alloc]init];
selectedView.backgroundColor = [UIColor redColor];
cell.selectedBackgroundView =  selectedView;

このコードは適切に動作します

72
Alfa

選択スタイルをnoneに設定した後、次のデリゲートメソッドを使用できます。

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

このようにコードをここに実装します

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath];
    [cell.lbls setTextColor:[UIColor whiteColor]];
    return indexPath;
}
16
Scar

CellForRowAtIndexPathで次のコードを使用します。

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

[cell.myLabel setHighlightedTextColor: [UIColor whiteColor]]; // for all your labels

これがあなたのために働くことを願っています。

コーディングをお楽しみください:)

12
Mrunal

この作業を行うには、選択スタイルをUITableViewCellSelectionStyleNoneに設定してから、メソッドsetSelected:animated:をオーバーライドして、必要な結果を取得する必要があります。青い(または灰色の)選択が表示されている場合、iOSの自動選択メカニズムと同じことを行います。

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    if (selected) {
        self.textLabel.textColor = [UIColor whiteColor];
    } else {
        self.textLabel.textColor = [UIColor blackColor];
    }
}

これを別の方法でカスタマイズすることもできます。 UITableViewCellの背景などを変更することにより.

11
who9vy

UITableViewCellのサブクラスで次の関数をオーバーライドします。

override func setHighlighted(highlighted: Bool, animated: Bool) { }
override func setSelected(selected: Bool, animated: Bool) { }
4
superarts.org

標準の選択スタイルの動作と一致させるには、setHighlighted:animated:setSelected:animated:の両方をオーバーライドする必要があります。コードの重複を避けるために、おそらくそのコードを共有メソッドに移動する必要があります。

override func setHighlighted(highlighted: Bool, animated: Bool) {

    setAsSelectedOrHighlighted(highlighted, animated: animated)
    super.setHighlighted(highlighted, animated: animated)
}

override func setSelected(selected: Bool, animated: Bool) {

    setAsSelectedOrHighlighted(selected, animated: animated)
    super.setSelected(selected, animated: animated)
}

func setAsSelectedOrHighlighted(selectedOrHighlighted: Bool, animated: Bool) {

    let action = {
        // Set animatable properties
    }

    if animated {
        UIView.animateWithDuration(1.0, delay: 0, options: .CurveEaseInOut, animations: action, completion: nil)
    }
    else {
        action()
    }
}
2
Logan Gauthier

カスタムセルで、awakeFromNibおよびsetSelectedのデフォルトの実装をオーバーライドします。

- (void)awakeFromNib {
    // Initialization code
    UIImageView * imageView = [[UIImageView alloc] initWithFrame:self.bounds];
    imageView.image = [UIImage imageNamed:@"cell_selected_img"];
    self.selectedBackgroundView = imageView;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
    if (selected) {
        self.lblCustomText.textColor = [UIColor whiteColor];
    } else {
        self.lblCustomText.textColor = [UIColor blackColor];
    }
}

また、選択スタイルNOTに設定されていることを確認してくださいなし

1
zeeawan

私がそれを機能させることができる唯一の方法は、

- (void)awakeFromNib {
    UIView *bgColorView = [[UIView alloc] init];
    bgColorView.backgroundColor = [UIColor colorWithRed:(55.0/255.0) green:(163.0/255.0) blue:(237.0/255.0) alpha:1.0];
    bgColorView.layer.masksToBounds = YES;
    self.selectedBackgroundView = bgColorView;
}
0
Fabricio PH

また、contentView.alphaを使用できます。以下に例を示します。

まず、セルの選択スタイルを設定します。

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

次に、カスタムセルクラスでこのメソッドをアニメーションの例でオーバーライドします。

  - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    [super setHighlighted:highlighted animated:animated];

    if (highlighted) {
        [UIView animateWithDuration:0.15f animations:^{
            self.contentView.alpha = 0.5f;
        }];
    } else {
        [UIView animateWithDuration:0.35f animations:^{
            self.contentView.alpha = 1.f;
        }];
    }
  }
0
Alex Kolovatov