86

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

ただし、クリックしたときに青い背景が欲しくないのですが、そうすると、セル内の s のselectionstylenone強調表示された色が失われます。UILabel

セルがクリックされたときに青い背景を取り除く方法はありますUILabelか?

4

10 に答える 10

178

これは次のように行うことができます。テーブル セルの選択スタイルを に設定します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];
    }
}
于 2012-08-12T07:04:34.037 に答える
16

選択スタイルを 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;
}
于 2012-08-12T07:07:02.640 に答える
15

この作業を行うには、選択スタイルをに設定する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 の背景を変更するなど、別の方法でこれをカスタマイズすることもできます。

于 2013-01-10T21:25:20.097 に答える
13

cellForRowAtIndexPath では、次のコードを使用します。

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

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

これがうまくいくことを願っています。

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

于 2012-08-12T07:21:13.600 に答える
6

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

override func setHighlighted(highlighted: Bool, animated: Bool) { }
override func setSelected(selected: Bool, animated: Bool) { }
于 2015-05-09T06:46:22.153 に答える
0

私がそれを機能させる唯一の方法は次のとおりでした:

- (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;
}
于 2015-04-27T17:28:37.590 に答える