【问题标题】:UITextField border in tvOS when focused聚焦时 tvOS 中的 UITextField 边框
【发布时间】:2016-07-22 13:35:33
【问题描述】:

我已经为 UITextField 层设置了自定义边框。当 UITextField 获得焦点时,视图会变大。但是该层并没有放大。因此在视图中间绘制了边框我做错了什么?

【问题讨论】:

    标签: uitextfield focus tvos


    【解决方案1】:

    这似乎是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 似乎是不必要的。除非我遗漏了一些极端情况。
    • 从头开始。毕竟似乎不起作用。嗯,它在从一个领域移动到另一个领域时确实有效。但如果该字段被触发并打开键盘 - 默认突出显示再次显示..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多