나는 스위프트에 익숙하지 않고 현재 더 큰 괴물 목장을 읽고 더 많은 것을 이해하고 있습니다. 나는 사용자가 화씨로 온도를 입력 할 수있게하는 응용 프로그램을 가지고 있으며 섭씨로 변환되어 인터페이스에 표시됩니다. 응용 프로그램에서는 섭씨 레이블에 한 자리 숫자 만 표시합니다. 이제 사용자가 알파벳 문자를 입력하지 못하도록하고 싶습니다. 나는 그렇게하는 법을 알아 내려고 노력했지만 그 아이디어를 얻을 수 없었다. 어떤 도움이라도 대단히 감사 할 것입니다.스위프트에서 알파벳 문자 금지 3
import UIKit
class ConversionViewController : UIViewController , UITextFieldDelegate {
@IBOutlet var textField: UITextField!
@IBOutlet var celsiusLabel: UILabel!
var fahrenheitValue: Measurement<UnitTemperature>?
{
didSet {
updateCelsiusLabel()
}
}
var celsiusValue: Measurement<UnitTemperature>? {
if let fahrenheitValue = fahrenheitValue {
return fahrenheitValue.converted(to: .celsius)
} else {
return nil
}
}
func updateCelsiusLabel() {
if let celsiusValue = celsiusValue {
celsiusLabel.text = numberFormatter.string(from: NSNumber(value: celsiusValue.value))
} else {
celsiusLabel.text = "???"
}
}
let numberFormatter: NumberFormatter = {
let nf = NumberFormatter()
nf.numberStyle = .decimal
nf.minimumFractionDigits = 0
nf.maximumFractionDigits = 1
return nf
}()
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,replacementString string: String) -> Bool {
let existingTextHasDecimalSeparator = textField.text?.range(of: ".")
let replacementTextHasDecimalSeparator = string.range(of: ".")
if existingTextHasDecimalSeparator != nil,
replacementTextHasDecimalSeparator != nil {
return false
} else {
return true
}
}
@IBAction func fahrenheitFieldEditingChanged(_ textField: UITextField) {
if let text = textField.text, let value = Double(text) {
fahrenheitValue = Measurement(value: value, unit: .fahrenheit)
} else {
fahrenheitValue = nil
}
}
@IBAction func dismissKeyboard(_ sender: UITapGestureRecognizer) {
textField.resignFirstResponder()
}
override func viewDidLoad() {
super.viewDidLoad()
updateCelsiusLabel()
}
}
체크 아웃이 질문에 http://stackoverflow.com/questions/12944789/allow-only-numbers-for-uitextfield-input을. –
http://stackoverflow.com/a/29783546/2303865 –