【Swift/UIKit】UITextViewに文字数の入力制限を設ける方法!

この記事からわかること

  • SwiftUITextView文字数入力制限設定する方法
  • UITextViewDelegatetextView(_:shouldChangeTextIn:replacementText:)使い方

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

参考文献:[Swift]UITextViewで指定の文字数以上入力できないようにする(リアルタイムで入力内容をチェックする)

環境

UITextViewに文字数の入力制限を設ける方法

SwiftのUITextView入力される文字数に制限を設定するにはUITextViewDelegateに準拠させてtextView(_:shouldChangeTextIn:replacementText:)デリゲートメソッドを使用して以下のように実装します。

inputTextView.delegate = self
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    // 変更された後の文字数を算出する
    let changedCnt = textView.text.count - range.length + text.count
    // 30文字制限を設けたい場合は以下のように実装する
    return changedCnt <= 30
}

textView(_:shouldChangeTextIn:replacementText:)

公式リファレンス:textView(_:shouldChangeTextIn:replacementText:)

optional func textView(
    _ textView: UITextView,
    shouldChangeTextIn range: NSRange,
    replacementText text: String
) -> Bool

textView(_:shouldChangeTextIn:replacementText:)ユーザーの操作した変更をUITextViewのテキストに反映させるかどうかを真偽値で返すデリゲートメソッドです。

引数から取得できる値

textView(_:shouldChangeTextIn:replacementText:)が呼ばれるのは入力or削除された直後なので引数から参照できるUITextViewは変更前のテキストを保持しているので注意が必要です。なので変更前のテキストの文字数と入力or削除される文字数から更新予定の文字数を算出し、指定した文字数より大きければfalseを返すことでUITextViewが更新されなくなります。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index