0
我已經設置了自定義邊框到UITextField的圖層。當UITextField專注時,視圖變大。但是圖層不會變大。因此在視圖中間畫出邊界我做錯了什麼?UITextField邊框在tvOS時聚焦
我已經設置了自定義邊框到UITextField的圖層。當UITextField專注時,視圖變大。但是圖層不會變大。因此在視圖中間畫出邊界我做錯了什麼?UITextField邊框在tvOS時聚焦
這似乎是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