2017-06-19 76 views
4

我想为我的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) 
    } 

} 

然而,当有人点击文本字段里面,我想更新的文本框的边框,使其绿色。有没有一种有效的方法来做到这一点?我试图分配一个函数,只要有人在我的主视图控制器中的文本框内触摸,但它似乎没有工作。

回答

2

我建议不结合这些行为。相反,添加一个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

+0

是否有更好的方法比启用触摸?我宁愿在用户在文本框中输入时使用,因为我不想让动画在一次触摸后消失 – codeislife

+0

啊,我明白了你现在要做的事情。你应该看看“追赶”响应者。所以当这个uitextfield“BECOMES FIRST RESPONDER”就是你想要设置新颜色的时候。然后当它“RESIGN BEING FIRST RESPONDER”可以返回到旧的颜色。这是你正在寻找的东西,但这与触摸无关。 https://stackoverflow.com/questions/7022180/how-to-know-when-uitextview-became-first-responder – Pochi

+0

只实现与2种方法我在说明书的末尾添加的委托。@ codeislife – Pochi