2016-07-22 73 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