如何自定义 UITextField 的数字输入?
How to customize numeric input for a UITextField?
我的 Storyboard 中有一个 UITextField
(表示小费值),开头为 [=11=].00
。如果用户键入 8
,我希望文本字段显示为 [=13=].08
。如果用户随后键入 3
,我希望文本字段显示为 [=15=].83
。如果用户随后键入 5
,我希望文本字段显示为 .35
。我将如何以这种方式将输入更改为 UITextField
?
您可以通过以下四个步骤完成此操作:
- 通过将 viewController 添加到
class
定义中,使您的 viewController 成为 UITextFieldDelegate
。
- 通过 Control 将
IBOutlet
添加到您的 textField - 从故事板中的 UITextField
拖动到您的代码。称之为 myTextField
.
- 在
viewDidLoad()
中,将您的 viewController 设置为文本字段的 delegate
。
实施textField:shouldChangeCharactersInRange:replacementString:
。
获取传入字符并将其添加到提示中,然后使用 String(format:)
构造函数来格式化您的字符串。
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var myTextField: UITextField!
// Tip value in cents
var tip: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
myTextField.delegate = self
myTextField.text = "[=10=].00"
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if let digit = Int(string) {
tip = tip * 10 + digit
textField.text = String(format:"$%d.%02d", tip/100, tip%100)
}
return false
}
}
我的 Storyboard 中有一个 UITextField
(表示小费值),开头为 [=11=].00
。如果用户键入 8
,我希望文本字段显示为 [=13=].08
。如果用户随后键入 3
,我希望文本字段显示为 [=15=].83
。如果用户随后键入 5
,我希望文本字段显示为 .35
。我将如何以这种方式将输入更改为 UITextField
?
您可以通过以下四个步骤完成此操作:
- 通过将 viewController 添加到
class
定义中,使您的 viewController 成为UITextFieldDelegate
。 - 通过 Control 将
IBOutlet
添加到您的 textField - 从故事板中的UITextField
拖动到您的代码。称之为myTextField
. - 在
viewDidLoad()
中,将您的 viewController 设置为文本字段的delegate
。 实施
textField:shouldChangeCharactersInRange:replacementString:
。 获取传入字符并将其添加到提示中,然后使用String(format:)
构造函数来格式化您的字符串。import UIKit class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var myTextField: UITextField! // Tip value in cents var tip: Int = 0 override func viewDidLoad() { super.viewDidLoad() myTextField.delegate = self myTextField.text = "[=10=].00" } func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { if let digit = Int(string) { tip = tip * 10 + digit textField.text = String(format:"$%d.%02d", tip/100, tip%100) } return false } }