UIButton のカスタム サブクラスを作成して、特定の問題をカプセル化しました (クライアントは、ほとんどのボタンの背景としてグラデーションを使用したいと考えています)。これまでのところ、この取り組みは計画どおりに機能しています。
しかし、私が作成したものの 1 つは、カスタム ボタンが許可されていないため、組み込みのハイライトを置き換えるカスタム 'ハイライト' でした。次のように、強調表示のためにスーパークラス関数をオーバーライドできたことは幸運でした。
-(void) setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
NSLog(@"Set highlighted called: %i", highlighted);
if (self.highlight==nil) {
self.highlight=[CAGradientLayer layer];
gradient.colors=[NSArray arrayWithObjects:
(id)[[UIColor colorWithWhite:1.0 alpha:.4] CGColor],
(id)[[UIColor colorWithWhite:0.0 alpha:.4] CGColor],
nil];
}
if(highlighted)
{
[[self layer] addSublayer:highlight];
}
else {
NSLog(@"Highlight should be removed...");
NSLog(@"Highlight index: %i", [[[self layer] sublayers] indexOfObject:highlight]);
[self.highlight removeFromSuperlayer];
NSLog(@"Highlight index: %i", [[[self layer] sublayers] indexOfObject:highlight]);
}
}
残念ながら、ハイライト レイヤーは適切に削除されていないようです。私のコードでわかるように、削除前 (2) と削除後 (2147483647、別名 NSNotFound) で強調表示されているインデックスを確認しています。したがって、理論的には、レイヤーから削除されます。
しかし、何らかの理由でカスタム ボタン内に表示されたままになってしまい、その理由がわかりません。
今のところ、ハイライトで背景のグラデーションの色を変更するだけで回避できますが、なぜこのコードが機能しないのか非常に興味があります.