web-dev-qa-db-ja.com

iOS TextField-オートコンプリートは空白文字を追加します

UITextFieldに問題があります。電子メールのオートコンプリートオプションを有効にしている場合、リストから電子メールを選択できますが、iOSはテキストフィールドの最後に空白スペースを自動的に追加します。

IOSのバグですか、またはこれを防ぐためにできることはありますか?追伸テキストの変更を処理し、文字列の末尾から空のスペースを削除できることは知っていますが、ネイティブな方法を探しています。

enter image description hereenter image description here

17
Vladimir Dinic

スマートな提案のデフォルトの動作は、提供されたテキストの後に空のスペースを追加することです。文を書いている場合、提案を選んだ後にスペースを押す必要はありません。

空白を削除することをお勧めします。ユーザーが入力しようとしても、空白は破棄されます。

それを行うには、変更後にプログラムでテキストを変更します。

コントローラーのviewDidLoadのテキストフィールドにターゲットを追加します

textField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)

@objc func textFieldDidChange(_ textField: UITextField) {

    let text = textField.text ?? ""

    let trimmedText = text.trimmingCharacters(in: .whitespaces)

    textField.text = trimmedText
}
6
zombie

QuickTypeバーから選択されたテキストはスペースを追加します。毎回手動でスペースを追加する必要を避けるためだと思います。 iOSは、スペースがその利便性に反することを賢く追加しないことを期待していると思います。ピリオドを追加すると、少なくともスペースは自動的に削除されます。

これを解決するには、すべてのアプリケーションテキストフィールドにUITextFieldのサブクラスを作成します。

_import UIKit

class ApplicationTextField: UITextField {

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        NotificationCenter.default.addObserver(self, selector: #selector(didEndEditing(notification:)), name: UITextField.textDidEndEditingNotification, object: nil)
    }

    @objc private func didEndEditing(notification:Notification) {
        self.text = self.text?.trimmingCharacters(in: .whitespaces)
    }
}
_

他のオブジェクトがUITextFieldDelegateを実装できるようにするには、NotificationCenterを使用し、didEndEditing(notification:)通知を監視します。

0
dev_exo

私はこの問題を解決する方法を見つけていません。正直なところ、私は多くの時間を費やしていません。私はまだプロジェクトに取り組んでいるので、他の機能に取り組んでいるので、この問題はスタンバイ状態のままにしました。これをAppleバグと見なすことができます。ところで、電子メールのテキストフィールドは空白を入力する方法を提供します。 、編集中ではなく編集後にメールアドレスを修正することで、この問題を克服する考えがあります。

たとえば、オートコンプリートからの入力として空白文字を含むこのメールを受け入れることができますが、そのメールを保存するか、そのアドレスにメールを送信すると、空白を削除できます。

0
Vladimir Dinic