###やりたいこと
カーソルの左の文字をボタンで削除する場合1回のタップで絵文字を削除したい。
###問題点
コーディングをして半角英数字、全角日本文字は削除できますが、絵文字を削除する場合、文字により2回か3回タップする必要が発生しています。
###考察と質問
下記のコードにおいて
//1文字のスペース
let amountOfCharacter = 1
の右辺の1をutf16で表現できれば解決すると思いました。
解決策を教えてください。
###コード
print("ここまで来た08b") //guard は条件を満たしていない時に、迅速にスコープを抜けるための処理(breakやreturn、例外のthrowなど)を行う。 //テキストがない場合抜ける guard let fullText = InputView.text else { return } print("ここまで来た08c") //カーソルの位置を定義 let offset = InputView.selectedRange.location //文字列が"あいうえお"の時、キャレットが"あ"の左側にあるならばoffset == 0 //キャレットが一番左にある場合削除する文字がないので抜ける if offset <= 0 { return } print("ここまで来た08d") //カーソルの左の文字列 let startIndex = fullText.utf16.startIndex let endIndex = fullText.utf16.endIndex //1文字のスペース⇒ ◎◎◎ ここが問題 let amountOfCharacter = 1 //カーソルの左の1文字を削除するこのコードをCommentOutしても同じ結果になった // InputView.deleteBackward() print("ここまで来た08e") //カーソルの左より1文字削除後の左の文字列の順位 let targetOfLeftIndex = fullText.utf16.index(startIndex, offsetBy: offset - amountOfCharacter) //数字の1を入れたら同じ現象になった //let targetOfLeftIndex = fullText.utf16.index(startIndex, offsetBy: offset - 1) //カーソルの右側の文字列の順位 let targetOfRightIndex = fullText.utf16.index(startIndex, offsetBy: offset) //右側の文字列 let rightText = fullText[targetOfRightIndex..<endIndex] //左の削除後の文字列定義(文字列の順位で設定) //let remain = fullText.underestimatedCount - String(rightText).underestimatedCount - amountOfCharacter //左側の文字列 //let leftText = fullText.suffix(remain) let leftText = fullText[startIndex..<targetOfLeftIndex] //右側の文字列 //let rightText = fullText[targetOfRightIndex..<endIndex] //左右の文字列を並べた全文字列 let modifiedText = leftText + rightText //左の削除後の全文字列の表示 InputView.text = String(modifiedText) //カーソルの位置表示 InputView.selectedRange.location = offset-amountOfCharacter } ```、 ###ご参考事項 - 環境は下記のとおりです。 MacBook Pro (15-inch, 2016) High Sierra OS10.13 Version 9.1 (9B55)Swift4にバージョンアップしました。 - 下記のように定義しています。 @IBOutlet weak var InputView: UITextView! @IBOutlet weak var Sakujo01: UIButton! - 画面は下記のとおりです。最初はキーボードはでておらず画面をタップして文字記入後削除ボタンを押して文字を消したいと思っております。画面のカーソルの左は削除後Aが現れもう一度タップすると消えます。 ![イメージ説明](edf06f9422717dd3e25ec43c5bf35ec9.png) よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/17 14:44
2017/11/17 14:57
2017/11/17 14:59
2017/11/18 00:36
2017/11/18 08:56
2017/11/19 05:13
2017/11/19 06:55
2017/11/19 07:57
2017/11/19 09:36 編集
2017/11/19 09:49
2017/11/20 02:02 編集
2017/11/24 08:39
2017/11/24 09:53
2017/11/25 11:57
2017/11/25 12:04
2017/11/26 00:56
2017/11/26 01:00
2017/11/29 10:40