2016-07-22 16 views
0

私はUITextFieldのレイヤーにカスタムボーダーを設定しました。 UITextFieldがフォーカスされると、ビューは大きくなります。しかし、層はアップサイズされていません。私は間違って何をしているのですか?フォーカス時にtvOSのUITextFieldボーダー

答えて

3

これは、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) 
} } 

ここでは、境界線を含むレイヤーを追加し、フォーカスまたは押されたときの境界線を調整します。私の意見ではそれ以上の仕事があります。

+0

よく機能します。 backgroundColorのクリアとリセットは不要です。私はいくつかの端の場合が欠けていない限り。 – Mantas

+0

それを傷つける。結局のところ動作しないようです。フィールド間を移動するときはうまく動作します。しかし、フィールドがトリガーされてキーボードが開かれた場合、デフォルトのハイライトが再度表示されます。 – Mantas

関連する問題