2016-07-22 79 views
0

我已經設置了自定義邊框到UITextField的圖層。當UITextField專注時,視圖變大。但是圖層不會變大。因此在視圖中間畫出邊界我做錯了什麼?UITextField邊框在tvOS時聚焦

回答

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