🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1652閲覧

UITextViewで文字を入力する際にTextViewの末尾に固定の文字列を常に入れておきたい

Yeezy21

総合スコア21

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/11/27 05:09

編集2020/11/27 07:35

TextViewの末尾に常にある文字列を表示しておきたいです。 TextViewの編集が開始された際にカーソルの位置を常に固定文字の前に置いておきたいです。

下のリンクを参考にカーソル移動などを試みたのですがうまくいかなったです。
いい方法を教えていただけると嬉しいです。

参考にした記事

DidBeginEditing内の出力では0が表示されるのですが、カーソルは移動してなかったです。

swift

1func textViewShouldBeginEditing(_ textView: UITextView) -> Bool { 2 if let selectedRange = textView.selectedTextRange { 3 4 textView.selectedRange.location = 0 5 6 let cursorPosition = textView.offset(from: textView.beginningOfDocument, to: selectedRange.start) 7 8 print(cursorPosition) 9 10 } 11 12 return true 13 } 14 15func textViewDidBeginEditing(_ textView: UITextView) { 16 17 if let selectedRange = textView.selectedTextRange { 18 19 textView.selectedRange.location = 0 20 21 let cursorPosition = textView.offset(from: textView.beginningOfDocument, to: selectedRange.start) 22 23 print(cursorPosition) 24 25 } 26 27 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TsukubaDepot

2020/11/27 07:11

ご自身で作られたコードをご提示いただけないでしょうか。 その方が効率的なデバッグが行えるかと思います。
Yeezy21

2020/11/27 07:37

コードを追加しました! よろしくお願いします。 デリゲートメソッドのshouldChangeTextInを使って対応しようかとも考えたのですが、今のところこちらもうまくできてないです。
guest

回答1

0

ベストアンサー

カーソルの現在位置を動的に取得するには textViewDidChangeSelection(_:) を使うことになりそうですので、たとえば

Swift

1 var suffix = "[ここは固定文字]" 2 3 override func viewDidLoad() { 4 super.viewDidLoad() 5 6 textView.delegate = self 7 textView.text = suffix 8 } 9 10 func textViewDidChangeSelection(_ textView: UITextView) { 11 if let selectedRange = textView.selectedTextRange { 12 13 let cursorPosition = textView.offset(from: textView.beginningOfDocument, to: selectedRange.start) 14 15 if textView.text.count - cursorPosition < suffix.count { 16 // カーソルを固定文字の直前で固定する 17 textView.selectedRange.location = textView.text.count - suffix.count 18 } 19 20 } 21 }

こんな感じだと固定文字の先頭より右側にはカーソルが行かなくなると思います。

投稿2020/11/27 08:40

TsukubaDepot

総合スコア5086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TsukubaDepot

2020/11/27 08:42

提示した方法だと、textView には固定文字だけが入っている方法になりますが、応用すれば textView に固定文字以外の文字が入っていても、固定文字部分にはカーソルがいかなくなるように変更することも可能になると思います。
Yeezy21

2020/11/27 09:06

ありがとうございます! おかげさまで実装できそうです。 とても助かりました!
TsukubaDepot

2020/11/27 09:07

こちらこそ勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問