web-dev-qa-db-ja.com

UITableViewCellSelectionStyleプロパティをカスタム色に設定するにはどうすればよいですか?

私はiPhoneアプリケーションを開発していますが、テーブルビューでセル選択スタイルのカスタムカラーが必要でしたITableViewCell Class Referenceを読みましたが、選択スタイルに定義されている定数は3つしかありません(青、灰色、なし)。 。参考資料で定義されているものとは異なる色を使用する1つのアプリケーションを見ました。

リファレンスで定義されている色以外の色を使用するにはどうすればよいですか?

前もって感謝します。

35
Amit Vaghela

選択を設定する最良の方法は、セルを作成するときにセルにselectedBackgroundViewを設定することです。

つまり.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
        cell.selectedBackgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectedCellBackground.png"]] autorelease];
    }

    // configure the cell
}

使用する画像には、(デフォルトの選択のように)ニースのグラデーションが必要です。単色が必要な場合は、UIImageViewの代わりにUIViewを使用して、backgroundColorを目的の色に設定できます。

この背景は、行が選択されたときに自動的に適用されます。

64
Matt Gallagher

cell.selectionStyleselectedBackgroundViewに設定されている場合、UITableViewCellSelectionStyleNoneを設定しても効果がないようです。設定しない場合、スタイルはデフォルトのグレーを使用します。

カスタムUIViewをセルに挿入する最初の提案を使用すると、セルは操作されますが、セルに触れたときに表示されません。選択したアクションが完了した後でのみ、プッシュしているため遅すぎます。新しいビューへ。選択した操作の開始前にセルで選択したビューを表示するにはどうすればよいですか?

24
Paul

UITableViewCellをサブクラス化した場合は、以下をオーバーライドすることにより、セルのさまざまな要素をカスタマイズできます。

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    if(highlighted) {
        self.backgroundColor = [UIColor redColor];
    } else {
        self.backgroundColor = [UIColor clearColor];
    }

    [super setHighlighted:highlighted animated:animated];
}

IOS7用の編集:Sashoが述べたように、あなたも必要です

cell.selectionStyle = UITableViewCellSelectionStyleNone
13
Willster

上記のいくつかを試しましたが、実際には、UITableViewCellの独自のサブクラスを作成してから、touchesBegan/touchesCancelled/touchesEndedメソッドをオーバーライドすることを好みます。これを行うには、セルのselectedBackgroundViewプロパティとhighlightedColorプロパティをすべて無視し、代わりに、上記のメソッドのいずれかが呼び出されるたびにこれらの色を手動で設定します。たとえば、セルの背景を緑に設定し、テキストを赤にする場合は、次のことを試してください(カスタムセルサブクラス内)。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //Set backgorund
    self.backgroundColor = [UIColor themeBlue];

    //Set text
    self.textLabel.textColor = [UIColor themeWhite];

    //Call super
    [super touchesBegan:touches withEvent:event];
}

これを機能させるには、以下を設定する必要があることに注意してください。

self.selectionStyle = UITableViewCellSelectionStyleNone;

それ以外の場合は、まず現在の選択スタイルを取得します。

編集:touchesCancelledメソッドを使用して元のセルの色に戻すことをお勧めしますが、touchesEndedメソッドは無視してください。

7
Charles Marsh

DidSelectRowAtIndexPath:をオーバーライドし、選択した色のUIViewを描画して、セル内のUILabelの後ろに挿入します。私はそれを次のようにします:

UIView* selectedView; //inside your header

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

  UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
  selectedView = [[UIView alloc] initWithFrame:[cell frame]];
  selectedView.backgroundColor = [UIColor greenColor]; //whatever

  [cell insertSubview:selectedView atIndex:0]; //Tweak this as necessary
  [selectedView release]; //clean up

}

選択が解除されて要件を満たすときに、このビューをアニメーション化することを選択できます。

2
Jeffrey Forbes

SublcassUITableViewCellおよびオーバーライドsetHighlighted:animated:

BackgroundColorを設定することにより、カスタム選択色を定義できます(ウィルスターの回答を参照)。

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    if(highlighted) {
        self.backgroundColor = [UIColor redColor];
    } else {
        self.backgroundColor = [UIColor clearColor];
    }

    [super setHighlighted:highlighted animated:animated];
}

BackgroundViewプロパティを設定することにより、カスタムの背景画像を定義できます。

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    if( highlighted == YES )
        self.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"seasonal_list_event_bar_default.png"]];
    else
        self.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"seasonal_list_event_bar_active.png"]];


    [super setHighlighted:highlighted animated:animated];
}
1
bentford

カスタムカラーを追加するには、以下のコードを使用します。そしてそれを透明にするためにalpha: 0.0

cell.selectedBackgroundView = UIView(frame: CGRect.zero)
cell.selectedBackgroundView?.backgroundColor = UIColor(red:0.27, green:0.71, blue:0.73, alpha:1.0)

カスタムカラーを使用していて、角を丸くしたい場合は、次を使用します。

cell.layer.cornerRadius = 8

また、これを使用してアニメーションと感触を改善します

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    tableView.deselectRow(at: indexPath, animated: true)
}
0
Prateekro
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {  
// Set Highlighted Color  
if (highlighted) {  
self.backgroundColor = [UIColor colorWithRed:234.0f/255 green:202.0f/255 blue:255.0f/255 alpha:1.0f];
    } else {  
        self.backgroundColor = [UIColor clearColor];  
  }   
}
0
PK86
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    // Add your Colour.
    SocialTableViewCell *cell = (SocialTableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
    [self setCellColor:Ripple_Colour ForCell:cell];  //highlight colour
}

- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    // Reset Colour.
    SocialTableViewCell *cell = (SocialTableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
    [self setCellColor:Ripple_Colour ForCell:cell]; //normal color

}

- (void)setCellColor:(UIColor *)color ForCell:(UITableViewCell *)cell {
    cell.contentView.backgroundColor = color;
    cell.backgroundColor = color;
}
0
Ishwar Hingu