Các bước rất cụ thể cho mã Swift
Bạn có thể cung cấp logic giới hạn đầu vào của trường văn bản trong func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
phương thức bằng cách triển khai UITextFieldDelegate
giao thức.
Để rõ ràng, các bước này giả định rằng bảng phân cảnh của bạn chứa Bộ điều khiển dạng xem với đối tượng trường văn bản chỉ chấp nhận các chữ số.
Tạo một lớp tùy chỉnh cho bộ điều khiển chế độ xem mở rộng UIViewController
. Đảm bảo rằng cảnh trong bảng phân cảnh của bạn tham chiếu đến lớp tùy chỉnh bằng cách đặt giá trị lớp tùy chỉnh trong Trình kiểm tra danh tính của Xcode.
import UIKit
class YourCustomController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
Tạo một lối thoát từ trường văn bản của cảnh đến Bộ điều khiển Chế độ xem tùy chỉnh của bạn.
class YourCustomController: UIViewController {
@IBOutlet weak var numberField: UITextField!
...
}
Áp dụng UITextFieldDelegate
giao thức trong bộ điều khiển chế độ xem tùy chỉnh của bạn.
class YourCustomController: UIViewController, UITextFieldDelegate {
...
}
Trong viewDidLoad
phương thức của bộ điều khiển chế độ xem tùy chỉnh của bạn , chỉ định đại biểu của trường văn bản cho lớp bộ điều khiển chế độ xem tùy chỉnh của bạn.
override func viewDidLoad() {
super.viewDidLoad()
numberField.delegate = self
}
Thêm UITextFieldDelegate
's func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
phương pháp.
Kết quả của việc đặt bộ điều khiển chế độ xem tùy chỉnh của bạn làm numberField
đại biểu của trong bước trước, phương thức này sẽ được gọi mỗi khi người dùng nhập một ký tự vào trường văn bản. Nếu phương thức của bạn trả về true
thì ký tự sẽ vẫn còn trong trường văn bản. Nếu phương thức của bạn trả về false
thì ký tự sẽ không còn trong trường văn bản.
Các string
tham số là các nhân vật được nhập vào bởi người sử dụng. Nếu string
ký tự có thể được chuyển đổi thành một Int
thì nó nằm trong khoảng từ 0 đến 9; nếu không, nó là một số ký tự không phải số.
class YourCustomController: UIViewController, UITextFieldDelegate {
...
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
return Int(string) != nil
}
}
(Xem bên dưới để biết mã bộ điều khiển chế độ xem đầy đủ.)
Ví dụ View Controller với trường văn bản chỉ có chữ số
import UIKit
class YourCustomController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var numberField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
numberField.delegate = self
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
return Int(string) != nil
}
}
Bộ điều khiển Chế độ xem Ví dụ với trường văn bản Thập phân
Nếu bạn muốn hỗ trợ một số thập phân thì hãy tận dụng NSNumberFormatter
. Xem các bình luận mã để biết sự khác biệt.
import UIKit
class YourCustomController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var numberField: UITextField!
private var formatter: NSNumberFormatter!
override func viewDidLoad() {
super.viewDidLoad()
numberField.delegate = self
formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
formatter.minimum = 0
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
return formatter.numberFromString("\(textField.text)\(string)") != nil
}
}