0
私はUITextFieldのレイヤーにカスタムボーダーを設定しました。 UITextFieldがフォーカスされると、ビューは大きくなります。しかし、層はアップサイズされていません。私は間違って何をしているのですか?フォーカス時にtvOSのUITextFieldボーダー
私はUITextFieldのレイヤーにカスタムボーダーを設定しました。 UITextFieldがフォーカスされると、ビューは大きくなります。しかし、層はアップサイズされていません。私は間違って何をしているのですか?フォーカス時にtvOSのUITextFieldボーダー
これは、layer properties not getting transformed when being focusedの既知の問題のようです。
一方、UITextField
をサブクラス化し、希望のフォーカス動作を実装することで、カスタムフォーカス動作を提供することができます。例:
class TextField: UITextField {
var borderLayer = CALayer()
override func awakeFromNib()
{
super.awakeFromNib()
self.borderLayer.borderColor = UIColor.blackColor().CGColor
self.borderLayer.borderWidth = 2.0
self.borderLayer.cornerRadius = 5.0
self.borderLayer.frame = self.bounds
self.layer.addSublayer(self.borderLayer)
}
override func didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator)
{
super.didUpdateFocusInContext(context, withAnimationCoordinator: coordinator)
if context.nextFocusedView === self
{
coordinator.addCoordinatedAnimations({
self.borderLayer.bounds = self.expandedBounds()
}){}
}
else if context.previouslyFocusedView === self
{
coordinator.addCoordinatedAnimations({
self.borderLayer.frame = self.bounds
}){}
}
}
override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?)
{
super.pressesBegan(presses, withEvent: event)
self.borderLayer.bounds = self.bounds
}
override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?)
{
super.pressesEnded(presses, withEvent: event)
self.borderLayer.bounds = self.expandedBounds()
}
func expandedBounds() -> CGRect
{
let insetX:CGFloat = self.bounds.height * 0.3333
let insetY:CGFloat = self.bounds.height * 0.075
return CGRectInset(self.bounds, -insetX, -insetY)
} }
ここでは、境界線を含むレイヤーを追加し、フォーカスまたは押されたときの境界線を調整します。私の意見ではそれ以上の仕事があります。
よく機能します。 backgroundColorのクリアとリセットは不要です。私はいくつかの端の場合が欠けていない限り。 – Mantas
それを傷つける。結局のところ動作しないようです。フィールド間を移動するときはうまく動作します。しかし、フィールドがトリガーされてキーボードが開かれた場合、デフォルトのハイライトが再度表示されます。 – Mantas