[解決済み] UITextFieldの最大長
2022-06-01 08:16:01
質問
私が試したところ swiftを使用してUITextFieldに入力できる最大文字数を設定する方法を教えてください。 を試したところ、10文字全部使うと文字も消せなくなることがわかりました。
キャンセル(全文字まとめて消す)しかできないのですが。
キーボードを塞がない方法(他の文字/記号/数字を追加できないが、バックスペースは使えるようにする)をご存知の方はいらっしゃいますか?
どのように解決するのですか?
Swift 5 と iOS 12 で、次のような実装を試してみてください。
textField(_:shouldChangeCharactersIn:replacementString:)
メソッドの一部である
UITextFieldDelegate
プロトコルの一部です。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let textFieldText = textField.text,
let rangeOfTextToReplace = Range(range, in: textFieldText) else {
return false
}
let substringToReplace = textFieldText[rangeOfTextToReplace]
let count = textFieldText.count - substringToReplace.count + string.count
return count <= 10
}
-
このコードで最も重要な部分は
range
(NSRange
) からrangeOfTextToReplace
(Range<String.Index>
). これを見る ビデオチュートリアル を参照し、この変換がなぜ重要であるかを理解してください。 -
このコードを正しく動作させるためには、このコードの前に
textField
'ssmartInsertDeleteType
の値をUITextSmartInsertDeleteType.no
. これにより、貼り付け操作の実行時に(不要な)余分なスペースが挿入される可能性を防ぐことができます。
以下の完全なサンプルコードでは
textField(_:shouldChangeCharactersIn:replacementString:)
の中に
UIViewController
:
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet var textField: UITextField! // Link this to a UITextField in Storyboard
override func viewDidLoad() {
super.viewDidLoad()
textField.smartInsertDeleteType = UITextSmartInsertDeleteType.no
textField.delegate = self
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let textFieldText = textField.text,
let rangeOfTextToReplace = Range(range, in: textFieldText) else {
return false
}
let substringToReplace = textFieldText[rangeOfTextToReplace]
let count = textFieldText.count - substringToReplace.count + string.count
return count <= 10
}
}
関連
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] 有効なメールアドレスの最大長を教えてください。
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] UITextFieldのテキスト変更イベント
-
[解決済み] JavaScriptの変数名として有効な文字は何ですか?
-
[解決済み] iPhone UITextField - プレースホルダーの文字色を変更する
-
[解決済み] UITextFieldの最大文字数を設定します。
-
[解決済み] UITextFieldのテキストインセット?
-
[解決済み】UITextFieldが変更されたときに確認するにはどうすればよいですか?
-
[解決済み】Java Stringから数字以外の文字を削除しても、小数点以下の区切り記号は残る
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
XCode のコンパイル例外を解決する clang: error: linker command failed with exit code 1
-
[解決済み] Xcode 6.3 - 現在の iOS Development 証明書または保留中の証明書要求がすでにあります。
-
[解決済み] Objective-Cでデリゲートを作成するにはどうしたらいいですか?
-
[解決済み] Objective-Cで文字列が空かどうかをテストするにはどうすればよいですか?
-
[解決済み] UIViewController のビューが表示されているかどうかを確認する方法
-
[解決済み] SwiftでUIAlertViewを作成するにはどうしたらいいですか?
-
[解決済み] UIViewの左上と右上だけにcornerRadiusを設定する方法は?
-
[解決済み] UITextFieldの最大文字数を設定します。
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] Swiftの配列を文字列に変換するには?