Почему мой делегат работает только тогда, когда определяется как VC, а не как внешний класс?
Я следовал этому туториалу о том, как ограничить textField определенной длиной и набором символов
вот мой код, и все же делегат не вызывается:
Класс VC: это называется (проверено во время отладки)
import UIKit
import CoreLocation
public class InlineMainViewController: UIViewController, CLLocationManagerDelegate, UITextFieldDelegate, MainUiDelegate {
...
var nameTextVerifier = NameTextVerifier()
@IBOutlet weak var enterName_text: UITextField!
...
override public func viewDidLoad() {
enterName_text.delegate = nameTextVerifier
}
NameTextVerifier класс:
import Foundation
public class NameTextVerifier: NSObject, UITextFieldDelegate {
public func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if string.characters.count == 0 {
return true
}
let currentText = textField.text ?? ""
let prospectiveText = (currentText as NSString).stringByReplacingCharactersInRange(range, withString: string)
return prospectiveText.containsOnlyCharactersIn("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") &&
prospectiveText.characters.count <= 6
}
}
этот код никогда не вызывается, когда я набираю enterName_text
с другой стороны, когда я ставлю то же самое shouldChangeCharactersInRange
в классе VC и установка VC быть делегатом
func onViewDidLoad() { enterName_text.delegate = self }
марки shouldChangeCharactersInRange
выполнять
как я могу проверить в чем проблема?
1 ответ
Если вы не используете TextManager вместо NameTextVerifier
var nameTextVerifier = TextManager()
in place of
var nameTextVerifier = NameTextVerifier()