2017-06-19 73 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