Почему мой делегат работает только тогда, когда определяется как 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()
Другие вопросы по тегам