У меня есть UItextField
с именем textField
в tableView статической ячейки.В этом поле содержится сумма в валюте, например, «10 000,00 долларов США».
При редактировании этой суммы символы валюты и тысячи группировок немного мешают.Поэтому я хотел бы удалить те, когда поле становится первым респондентом.
Я делаю это в textFieldShouldBeginEditing
.
В первый раз, когда я делаю это, все работает.Содержимое textField
переформатируется без разделителя валют и групп.
Вкл. textFieldDidEndEditing
Я переформатирую значение в правильную строку валюты снова.Это также работает.
Проблема возникает, когда я повторно вхожу в поле во второй раз.Во время отладки я вижу, что textField.text
превратился в строку без символа валюты и символа группировки, , но на дисплее не отображается, что .Хотя это сработало с первого раза!Во второй раз кажется, что существует несоответствие между тем, что на экране, и значением, которое видит отладчик.
Я пробовал что-то вроде:
- tableView.beginUpdates ();tableView.endUpdates ()
- textView.setNeedsDisplay
... но это не работает.
Поэтому я скопировал код, который удаляет форматирование валюты в textFieldShouldBeginEditing
для нового метода делегата textFieldDidBeginEditing
.
Тогда все работало нормально.Я мог нажимать другие элементы управления и возвращаться к textField несколько раз, и каждый раз, когда элемент управления терял бы свое форматирование при вводе, и после потери фокуса возвращался к форматированной строке валюты.
Поэтому я решил удалитьметод textFieldShouldBeginEditing
.Но потом все снова сломалось!Похоже, я должен реализовать как textFieldShouldBeginEditing
, так и textFieldDidBeginEditing
, чтобы иметь возможность подготовить содержимое textField
для редактирования пользователем?
Это ошибка?
extension Double {
public func doubleToString(numberStyle: NumberFormatter.Style, decimals: Int, withThousandSeparator: Bool) -> String {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = numberStyle
numberFormatter.maximumFractionDigits = decimals
if !withThousandSeparator {
numberFormatter.groupingSeparator = ""
}
return numberFormatter.string(from: NSNumber(value: self)) ?? ""
}
}
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField === self.textField {
textField.text = amount.doubleToString(numberStyle: .decimal, decimals: 2, withThousandSeparator: false)
}
}