2017-06-19 15 views
4

私のUItextfieldのアニメーションを作成したいと思います。これを行うために、私はのUITextFieldのサブクラスを作成し、私はそこに私のコードを保存:Swift Animate Textfield

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

これらの動作を組み合わせないことをお勧めします。その代わりに、 "Touches Enabled"のUIViewを追加し、このビューにタッチリスナーを追加したり、タップしたりしてカスタムuitextフィールドの便利なメソッドにメッセージを送信したり、直接見た目を変更するだけです。

これは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"が新しい色を設定したいときです。その後、「最初の応答者であることを誓う」ときに、それを古い色に戻すことができます。これはあなたが探しているものですが、これはタッチとは関係ありません。 https://stackoverflow.com/questions/7022180/how-to-know-when-uitextview-became- first -responder – Pochi

+0

説明の最後に追加した2つの方法でデリゲートを実装するだけです。@ codeislife – Pochi