UITableViewCell
をクリックすると、セルをクリックすると、背景部分(背景画像がカバーしていない領域)が青色に変わります。また、セル上のUILabel
sをクリックすると、すべてが白に変わります。
しかし、私が望んでいないのは、クリックしたときに青い背景ですが、selectionstylenone
を実行すると、セル内のUILabel
sの強調表示された色が失われます。
セルがクリックされたときに青色の背景を取り除くだけで、UILabel
sの強調表示された色を維持する方法はありますか?
これは次のように実行できます。テーブルセルの選択スタイルを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];
}
}
IOS7より前に作業している場合は、セル選択スタイルをなしにします
cell.selectionStyle = UITableViewCellSelectionStyleNone;
それ以外の場合は、UITableViewCellSelectionStyleDefault
のままにしておきます
次に:
UIView *selectedView = [[UIView alloc]init];
selectedView.backgroundColor = [UIColor redColor];
cell.selectedBackgroundView = selectedView;
このコードは適切に動作します
選択スタイルを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;
}
CellForRowAtIndexPathで次のコードを使用します。
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
[cell.myLabel setHighlightedTextColor: [UIColor whiteColor]]; // for all your labels
これがあなたのために働くことを願っています。
コーディングをお楽しみください:)
この作業を行うには、選択スタイルを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の背景などを変更することにより.
UITableViewCell
のサブクラスで次の関数をオーバーライドします。
override func setHighlighted(highlighted: Bool, animated: Bool) { }
override func setSelected(selected: Bool, animated: Bool) { }
標準の選択スタイルの動作と一致させるには、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()
}
}
カスタムセルで、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に設定されていることを確認してくださいなし。
私がそれを機能させることができる唯一の方法は、
- (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;
}
また、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;
}];
}
}