Swift kodu için çok özel adımlar
Protokolü func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
uygulayarak, metin alanının yöntemdeki girişini kısıtlayan mantık sağlayabilirsiniz UITextFieldDelegate
.
Netlik açısından, bu adımlar, film şeridinizin yalnızca rakamları kabul etmesi gereken bir metin alanı nesnesine sahip bir Görünüm Denetleyicisi içerdiğini varsayar .
Genişleyen görünüm denetleyicisi için özel bir sınıf oluşturun UIViewController
. Xcode'un Kimlik Denetçisi'nde özel sınıf değerini ayarlayarak film şeridinizdeki sahnenin özel sınıfa başvurduğundan emin olun .
import UIKit
class YourCustomController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
Sahnenizin metin alanından özel Görüntü Kontrolörünüze bir çıkış oluşturun.
class YourCustomController: UIViewController {
@IBOutlet weak var numberField: UITextField!
...
}
Uygula UITextFieldDelegate
Özel görünüm denetleyicisi protokolü.
class YourCustomController: UIViewController, UITextFieldDelegate {
...
}
Özel görünüm denetleyicinizin viewDidLoad
yönteminde, metin alanınızın temsilcisini özel görünüm denetleyicisi sınıfınıza atayın.
override func viewDidLoad() {
super.viewDidLoad()
numberField.delegate = self
}
Ekle UITextFieldDelegate
bireyin func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
yöntemi.
Özel görünüm denetleyicinizi numberField
önceki adımdaki temsilcisi yapmanın bir sonucu olarak , bu yöntem bir kullanıcı metin alanına her karakter girdiğinde çağrılacaktır. Yönteminiz geri dönerse true
, karakter metin alanında kalacaktır. Senin yöntem dönerse false
o zaman karakter olacak değil metin alanına kalır.
string
Parametre kullanıcı tarafından girilen olmak karakterdir. Eğer string
karakteri dönüştürülebilir Int
sonra 0 ila 9 arasında olduğu; aksi takdirde, sayı olmayan bir karakterdir.
class YourCustomController: UIViewController, UITextFieldDelegate {
...
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
return Int(string) != nil
}
}
(Tam görünüm denetleyici kodu için aşağıya bakın.)
Yalnızca rakam metin alanına sahip Örnek Görünüm Denetleyici
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
}
}
Ondalık metin alanına sahip Örnek Görünüm Denetleyici
Ondalık bir sayıyı desteklemek istiyorsanız, bundan yararlanın NSNumberFormatter
. Farklılıklar için kod açıklamalarına bakın.
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
}
}