あなたは説明何をする必要がある場合は、UITextViewDelegate
でtextView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String)
方法を使用することができます。
例:
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
// as @nhgrif suggested, we can skip the string manipulations if
// the beginning of the textView.text is not touched.
guard range.location == 0 else {
return true
}
let newString = (textView.text as NSString).stringByReplacingCharactersInRange(range, withString: text) as NSString
return newString.rangeOfCharacterFromSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).location != 0
}
まず、我々はtextView
に表示されます新しい文字列を構築します。
次に、空白、タブ、または改行文字で始まるかどうかを確認します。
もしそうなら、私たちはそうtextView
がtextView
に新しいテキストを入れて、それ以外の場合。
に新しいテキストを配置しませんfalse
を返します。
注:コピー貼り付け操作を処理するためにreplacementText
をチェックする代わりに、文字列全体をチェックする必要があります。
もう一つの可能な方法は、ユーザーが入力したテキストを制限していますが、値を使用する必要がある場合、結果のテキストをトリミングされていません。
let myText = textView.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
編集:@ nhgrifさんのコメントに基づいた方法よりパフォーマンスにするためにguard
句を追加します。
この行をガードrange.location == 0 else {return true} 'の上に追加することで、これをわずかに最適化できます。 'range.location'が' 0'の場合、どういうわけか新しい文字が前面に表示されます。そうでない場合は、比較的高価な文字列操作チェックをスキップできます。 – nhgrif
ありがとう@nhgrif!これは本当にクールです、私はあなたの提案に基づいて私の答えを編集しました。 –