2017-02-26 3 views
1

さまざまな理由から、選択が変更されるたびにテキストビュー内のテキストにアクセスする必要があるため、デリゲートメソッドtextViewDidChangeSelection()を実装しました。しかし、何らかの理由で、このメソッド内からtextView.textにアクセスしようとすると、時にはそれが空でない場合でも空に戻ります。たとえば、このコードを実行します。textViewDidChangeSelectionメソッドは、TextView.textが空であると考えます。

func textViewDidChangeSelection(_ textView: UITextView) { 
    print("Called textViewDidChangeSelection") 

    if textView.text.isEmpty { 
     print("textview is empty") 
    } else { 
     print("textview is not empty") 
    } 
} 

私のコードでこの例を使用すると、空ではないtextViewをクリックし、「textview is empty」と表示されることがあります。シミュレータを再実行してtextViewをクリックした直後に最も頻繁に発生する傾向があるようですが、textViewを初めてクリックしたとき(他のtextViewをクリックした後)、または私は別のビューからtextViewsを含んでいる私のUIViewにセグを返す。

これはなぜ起こるのですか?

答えて

0
textViewDidChangeSelection(_ textView: UITextView) 

は、テキストの選択が変更されたときに呼び出されます。別のtextViewが選択されているとは限りません。実際、古くからtextViewのselectedRangeプロパティはゼロを返す(挿入を示す)が、今では(Appleによると)選択範囲の長さはゼロではないかもしれません。テキストビューから離れてクリックすると、デリゲートメソッドが最初のtextView(あなたが残しているもの)に対して起動して、あなたが見ている結果を得ることができます(空の場合)。

あなたのTextViewタグを与え、使用してみてください:

func textViewShouldBeginEditing(_ textView: UITextView) -> Bool { 
    print("Selected \(textView.tag)") 

    return true 
} 

を、それはあなたの問題を解決するかどうかを確認するには。もちろん、タグはすばやく汚れたチェックに過ぎず、おそらくアプリではもっと柔軟なtextView識別情報を使用します。

+0

答えをありがとう!実際には 'textViewDidBeginEditing'メソッドで変数を設定し、それを参照するだけで回避策を見つけることができました。 – CosmicBuffalo

関連する問題