Swift kodu için çok özel adımlar
Protokolü func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Booluygulayarak, 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 viewDidLoadyö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 UITextFieldDelegatebireyin func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Boolyö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 falseo zaman karakter olacak değil metin alanına kalır.
stringParametre kullanıcı tarafından girilen olmak karakterdir. Eğer stringkarakteri dönüştürülebilir Intsonra 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
}
}