ユーザがキーパッドの削除ボタンを押すと、UITextViewから削除された文字を取得しようとしています。iOSのUITextViewから削除された文字を取得できません
たとえば、:(abc)のようにテキストビューにテキストを入力すると、範囲と場所を確認して削除された文字を取得できます。英語のテキストに問題はありません
"ヒンディー語"などの英語以外のテキストがあると、挑戦が始まります。
私は、テキストビューで "परक"と入力し、一度に1文字ずつ右から左に削除すると、削除された文字をそれぞれक、र、पとして識別できます。私は「परी」などのテキストを持っている場合:
私は、文字列などのために
でヒンディー語の母音を持っている本当の問題スタート
。その後、ヒンディー語のテキストによると、प、र、ीの3つの文字が含まれています。ここではヒンディー語の長い母音です私はtextviewにenterを入力すると、デリゲートメソッドはこのテキストを識別できます。
しかし、キーボードの削除ボタンを押して単語 "परी"を削除すると、削除された単語を判断するための範囲計算が間違っているようです。 私は
としてレンジ(3 ... < 3) をी削除する範囲の値を取得する - のstartIndex:3 - endIndexの:3
のstartIndexとendIndexが同じであるので、私は空の文字列を取得します。続き
は、私は誰もこれで私を助けることができる場合、それは素晴らしいことだのTextViewに文字を入力するか、または削除する
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
if (range.location == 0 && text == " ")
{
return false
}
// Its backspace
if text == ""
{
// Set startIndex for Range
let startIndex = textView.text.startIndex.advancedBy(range.location, limit: textView.text.endIndex)
// Set new Range
let newRange = startIndex..<textView.text.startIndex.advancedBy(range.location + range.length, limit: textView.text.endIndex)
// Get substring
// Here I get the character that is about to be deleted
let substring = textView.text[newRange]
print(substring) //Gives empty string when i delete ी
return true
}
print(text) // This prints ी when i enter it in textview after पर
return true
}
を使用していたコードです。私はAndroidでチェックして、削除されたときにそれを識別することができます。不思議の返信を待つ ....
注:私はUITextView
に"परी"
の最後の文字を削除すると、コードが
問題はありますか?文字列を固定Unicodeに変換してから範囲を比較してみてください。 – idocode
パラメータで受け取った 'range'の値は何ですか?私はヒンディー語の文字については知りませんが、スウィフトプレイグラウンドでは ''文字列 '。characters.count'と ''पर "。characters.count' return' 2' ...しかし、 ''परी'。lengthOfBytes (.utf8を使用)は '9'と' 'पर"です。lengthOfBytes(.utf8を使用)は '6'です。 UNICODE文字列をどのように処理しているかに問題があるようです。 –