2016-06-27 5 views
1

私はあなたが書いた行の数に沿って成長する、柔軟な高さを持つと思われるテキストフィールドゾーンを持っています。高さの変化にオブザーバーを追加するにはどうすればいいですか?

高さの変更を聞きたい場合は、新しい行が作成されるときに、このリスナーは「高さが変更されました!」と表示されます。

Initial Height

----------初期高----------

Height has changed !

------- ---高さが変わった! ----------

迅速でaddObserverkeyboardWillShowようNotificationIdentifierを必要とし、ここで私はheightWillChangeのようなものを持っていないので、私は、これを行うための適切な方法を見つけることができません。

高さが変更されたときに関数を呼び出すにはどうすればよいですか?

+0

あなたは、入力されたテキストのために 'UITextView'を使用していますか? –

+0

はい、あります。カスタムのUITextViewクラスです。 –

+1

多分これはあなたを助けるでしょうhttp://stackoverflow.com/questions/4000664/is-there-a-uiview-resize-event – tbilopavlovic

答えて

1

使用デリゲートメソッドあなたのUITextView

var textViewHeight: CGFloat = 0 

func textViewDidChange(textView: UITextView) 
{ 
    let newTextViewHeight = textView.frame.size.height 
    if textViewHeight != newTextViewHeight 
    { 
     print("---------- Height has changed !!! ----------") 
    } 
    textViewHeight = newTextViewHeight 
} 
+0

ここで私はこの技術を使用しますが、問題が発生します。実際、私のtextViewの高さの振る舞いは他のクラスによって支配され、このクラスはtextViewDidChangeの後に呼び出されます。その後、1つの変更に対して、高さは変更されますが、textViewDidChangeがキャッチするには遅すぎます。 –

+0

@ Bram'inなら、あなたはカスタムクラスの中で潜水して、すべての変更が終了する場所を見つけることができます。リポジトリがgithubの場合はフォークするか、didChangeHeight機能を使用してプルリクエストを行うことさえできます。 –

0

あなたはKVOを使用することができます。あなたがビューコントローラからこれをやっているなら、viewDidLoadに観測を追加することができます。たとえば:

override func viewDidLoad() { 
     super.viewDidLoad() 
     self.textField = UITextField(frame: CGRect(x: 0.0, y: 0.0, width: 100.0, height: 100.0)) 

     self.textField.addObserver(self, forKeyPath: "frame", options: .New, context: nil) 
    } 

はその後に対応:

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
     if keyPath == "frame" && object === self.textField 
     { 
      print(self.textField.frame) 
     } 
    } 

その後、あなたのビューコントローラがdeinitedされたときに観測削除:

deinit { 
    self.textField.removeObserver(self, forKeyPath: "frame") 
} 
+0

ありがとうございます。私はあなたのソリューションを試しましたが、それでも動作しません。オブザーバーは何かに気付く。私はいくつかの研究をしましたが、私が知ることができるのは、オブザーバーが宣言するのがやめることです。この解決策は最高のようですが、変更する必要があります。私は明日これを見るでしょう。 –

関連する問題