编辑/更新:Xcode 11.4 • Swift 5.2
请通过代码检查评论
IntegerField.swift 文件内容:
import UIKit
class IntegerField: UITextField {
var value: Int { string.digits.integer ?? 0 }
var maxValue: Int = 999_999_999
private var lastValue: Int = 0
override func willMove(toSuperview newSuperview: UIView?) {
addTarget(self, action: #selector(editingChanged), for: .editingChanged)
keyboardType = .numberPad
textAlignment = .right
sendActions(for: .editingChanged)
}
override func deleteBackward() {
text!.remove(at: text!.index(before: text!.endIndex))
sendActions(for: .editingChanged)
}
@objc func editingChanged() {
guard value <= maxValue else {
text = Formatter.decimal.string(for: lastValue)
return
}
text = Formatter.decimal.string(for: value)
print("Value:", value)
lastValue = value
}
}
您还需要将这些扩展添加到您的项目中:
Extensions UITextField.swift 文件内容:
import UIKit
extension UITextField {
var string: String { text ?? "" }
}
Extensions Formatter.swift 文件内容:
import Foundation
extension Formatter {
static let decimal = NumberFormatter(numberStyle: .decimal)
}
扩展 NumberFormatter.swift 文件内容:
import Foundation
extension NumberFormatter {
convenience init(numberStyle: Style) {
self.init()
self.numberStyle = numberStyle
}
}
Extensions StringProtocol.swift文件内容:
extension StringProtocol where Self: RangeReplaceableCollection {
var digits: Self { filter(\.isWholeNumber) }
var integer: Int? { Int(self) }
}
示例项目
var answer1 = Int(txtBox1.text)
。 - dibi