私はiPhoneアプリケーションを開発していますが、テーブルビューでセル選択スタイルのカスタムカラーが必要でしたITableViewCell Class Referenceを読みましたが、選択スタイルに定義されている定数は3つしかありません(青、灰色、なし)。 。参考資料で定義されているものとは異なる色を使用する1つのアプリケーションを見ました。
リファレンスで定義されている色以外の色を使用するにはどうすればよいですか?
前もって感謝します。
選択を設定する最良の方法は、セルを作成するときにセルに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
を目的の色に設定できます。
この背景は、行が選択されたときに自動的に適用されます。
cell.selectionStyle
がselectedBackgroundView
に設定されている場合、UITableViewCellSelectionStyleNone
を設定しても効果がないようです。設定しない場合、スタイルはデフォルトのグレーを使用します。
カスタムUIView
をセルに挿入する最初の提案を使用すると、セルは操作されますが、セルに触れたときに表示されません。選択したアクションが完了した後でのみ、プッシュしているため遅すぎます。新しいビューへ。選択した操作の開始前にセルで選択したビューを表示するにはどうすればよいですか?
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
上記のいくつかを試しましたが、実際には、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メソッドは無視してください。
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
}
選択が解除されて要件を満たすときに、このビューをアニメーション化することを選択できます。
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];
}
カスタムカラーを追加するには、以下のコードを使用します。そしてそれを透明にするために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)
}
- (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];
}
}
- (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;
}