我可以根據我在文本字段中輸入的內容,使用以下代碼行來改變我在文本字段中顯示數字的方式。但是我甚至無法在我的代碼的第二個版本中輸入數字。爲什麼replaceCharacters更改文本字段中的文本所必需的?
爲什麼
[let oldText = textField.text! as NSString
var newText = oldText.replacingCharacters(in: range, with: string)]
是必要的嗎?
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let oldText = textField.text! as NSString
var newText = oldText.replacingCharacters(in: range, with: string)
var newTextString = String(newText)
let digits = CharacterSet.decimalDigits
var digitText = ""
for c in (newTextString?.unicodeScalars)! {
if digits.contains(UnicodeScalar(c.value)!) {
digitText.append("\(c)")
}
}
// Format the new string
if let numOfPennies = Int(digitText) {
newText = "$" + self.dollarStringFromInt(numOfPennies) + "." + self.centsStringFromInt(numOfPennies)
} else {
newText = "$0.00"
}
textField.text = newText
return false
}
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField.text!.isEmpty {
textField.text = "$0.00"
}
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true;
}
func dollarStringFromInt(_ value: Int) -> String {
return String(value/100)
}
func centsStringFromInt(_ value: Int) -> String {
let cents = value % 100
var centsString = String(cents)
if cents < 10 {
centsString = "0" + centsString
}
return centsString
}
如果我像這樣改變它,它不再工作。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
var newText = textField.text
let digits = CharacterSet.decimalDigits
var digitText = ""
for c in (newText?.unicodeScalars)! {
if digits.contains(UnicodeScalar(c.value)!) {
digitText.append("\(c)")
}
}
// Format the new string
if let numOfPennies = Int(digitText) {
newText = "$" + self.dollarStringFromInt(numOfPennies) + "." + self.centsStringFromInt(numOfPennies)
} else {
newText = "$0.00"
}
textField.text = newText
return false
}
如果shouldChangeCharactersIn方法直接更新文本字段的文本,那麼它必須返回false。 – rmaddy
@rmaddy謝謝你有什麼想法爲什麼第一個版本使用.replacingCharacters方法來改變文本?我的意思是有很多方法可以在不使用額外的行的情況下更改文本字段中的文本。使用它有什麼好處嗎? –
@willianPoliciano謝謝!在改變返回值後,它適用於第二個版本。但仍然有一個問題,看看你能否幫助我。我在回覆rmaddy時解決了這個問題 –