【问题标题】:Swift Animate TextfieldSwift 动画文本字段
【发布时间】:2017-06-19 00:57:34
【问题描述】:

我想为我的 UItextfield 创建一个动画。为此,我创建了一个 UITextField 的子类并将我的代码存储在那里:

import Foundation  
import UIKit  
class textfieldEdit: UITextField, UITextFieldDelegate {  

    let border = CALayer()  
    let width =  CGFloat(2.0)  

    required init?(coder aDecoder: (NSCoder!)) {  
        super.init(coder: aDecoder)  
        self.delegate=self;  
        border.borderColor = UIColor( red: 216/255, green: 216/255, blue: 216/255, alpha: 100 ).cgColor  

        border.frame = CGRect(x: 0, y: self.frame.size.height - width, width:  self.frame.size.width, height: self.frame.size.height)  
        border.borderWidth = width  
        self.layer.addSublayer(border)  
        self.layer.masksToBounds = true  
    }  

    override func draw(_ rect: CGRect) {  
        border.frame = CGRect(x: 0, y: self.frame.size.height - width, width:  self.frame.size.width, height: self.frame.size.height)  
    }  

    override func awakeFromNib() {  
        super.awakeFromNib()  
        border.frame = CGRect(x: 0, y: self.frame.size.height - width, width:  self.frame.size.width, height: self.frame.size.height)  
    }  

}  

但是,当有人在文本字段内单击时,我想更新文本字段的边框并使其变为绿色。有没有一种有效的方法来做到这一点?每当有人触摸我的主视图控制器中的文本框内部时,我都尝试为其分配一个功能,但它似乎不起作用。

【问题讨论】:

    标签: swift xcode


    【解决方案1】:

    我建议不要将这些行为结合起来。相反,添加一个带有“Touches Enabled”的 UIView,然后向该视图添加一个触摸侦听器,点击时将消息发送到自定义 uitextfield 中的便捷方法,或者直接更改它的外观。

    这也适用于 UIButton。

    出于布局目的,只需使按钮或视图具有与标签相同的边缘约束以及其中心 X 和 Y 位置。

    不要忘记为您的自定义文本标签调用“setNeedsDisplay”来强制它重绘。

    What is the most robust way to force a UIView to redraw?

    编辑:如果您只对当前正在编辑 UITextfield 时更改边框颜色感兴趣,请向其添加一个委托并相应地更改外观一次,当它成为第一响应者(正在编辑)时,以及当它辞职时第一响应者(停止编辑):

    How to know when UITextView became first responder

    在此处更改边框:

     optional func textViewDidBeginEditing(_ textView: UITextView)
    

    https://developer.apple.com/documentation/uikit/uitextviewdelegate/1618610-textviewdidbeginediting

    并在此处恢复正常:

     optional func textViewDidEndEditing(_ textView: UITextView)
    

    https://developer.apple.com/documentation/uikit/uitextviewdelegate/1618628-textviewdidendediting

    【讨论】:

    • 有没有比启用触摸更好的方法?我宁愿在用户在文本框中输入时使用,因为我不希望动画在一次触摸后消失
    • 啊,我知道你现在想做什么了。您应该着眼于“捕捉”响应者。因此,当这个 uitextfield “成为第一响应者”时,就是您想要设置新颜色的时候。然后当它“RESIGN BEING FIRST RESPONDER”时,您可以将其恢复为旧颜色。这就是您要寻找的,但这与触摸无关。 stackoverflow.com/questions/7022180/…
    • 只需使用我在描述末尾添加的 2 个方法来实现委托即可。@codeislife
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    相关资源
    最近更新 更多