標準の UITableView があります。shadowColor
セルのtextLabel
をに設定したいのですが[UIColor whiteColor]
、セルがタッチされたときだけです。そのために、次のコードを使用しています。setSelected/setHighlighted をオーバーライドするカスタム UITableViewCell サブクラスです。
@implementation ExampleTableViewCell
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
[self setShadowColorSelected:selected];
}
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
[super setHighlighted:highlighted animated:animated];
[self setShadowColorSelected:highlighted];
}
- (void)setShadowColorSelected:(BOOL)selected {
if (selected) {
self.textLabel.shadowColor = [UIColor blackColor];
}else {
self.textLabel.shadowColor = [UIColor whiteColor];
}
}
@end
このアプローチに関する私の問題は、選択を解除すると、ラベルのテキストと影の両方が白くなる非常に短い期間がセルにあることです。選択解除の正確な瞬間に撮影されたこのスクリーンショットを参照してください。
基本的には、次の 2 つの投稿と同じアプローチです。
選択時にUITableViewCellのテキストシャドウを削除する
後者の質問で受け入れられた回答のアプローチを使用しています。
非常に単純なコード プロジェクトを作成し、github にアップロードしました。それは私の問題を示しています。単一のセルを表示するのは単なる UITableViewController です。
それとは別に、派手なことは何もありません。UITableView デリゲート メソッド:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[ExampleTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.textLabel.text = @"test";
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView deselectRowAtIndexPath:indexPath animated:YES]; //setting this to NO doesn't work either!
}
何か案は?