Swift UITextfield и CharacterSet не могут удалить предыдущий ввод пользователя - PullRequest
0 голосов
/ 03 августа 2020
• 1000 однако код, который я закомментировал, единственная разница в том, что пользователь не может удалить после того, как он / она введет число.
Принимая во внимание, что пользователь мог удалить после того, как он / она ввел номер, если я заменил текущий код с закомментированным кодом.

введите описание изображения здесь

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let existingTextHasDecimalSeperator = textField.text?.range(of: ".")
        let replacementTextHasDecimalSeperator = string.range(of: ".")
        
//        let replacementTextCharacterSet = CharacterSet(charactersIn: string)
//        let replacementTextIsAlphabetic = (replacementTextCharacterSet.isDisjoint(with: CharacterSet.letters) == false) 
          ///This means an element in set A intersect with an element in set B
        
   let replacementTextCharacterSet = CharacterSet(charactersIn: string)
   let replacementTextIsAlphabetic = (replacementTextCharacterSet.isSubset(of: CharacterSet.letters) == true)
   if (existingTextHasDecimalSeperator != nil && replacementTextHasDecimalSeperator != nil) || replacementTextIsAlphabetic {
            return false
        } else {
            return true
        }

Код, который был закомментирован выше, работает так, как задумано, однако текущий код - нет, и я не смог понять почему.
Не могли бы вы объяснить мне причину, по которой я не могу удалить то, что ввожу позже.
Если я использую .isSubset = true, logi c мне кажется таким же.

1 Ответ

1 голос
/ 03 августа 2020

вам нужно обработать backspace в вашей shouldChangeCharactersIn функции https://developer.apple.com/documentation/uikit/uitextfielddelegate/1619599-textfield

string

Строка замены для указанного диапазона. Во время набора этот параметр обычно содержит только один введенный новый символ, но он может содержать больше символов, если пользователь вставляет текст. Когда пользователь удаляет один или несколько символов, строка замены пуста.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if (string.isEmpty){
            print("Backspace")
        }
        return true
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...