【问题标题】:why is my delegate works only when defined as VC and not as external class?为什么我的委托仅在定义为 VC 而不是外部类时才起作用?
【发布时间】:2016-02-13 08:41:26
【问题描述】:

我已经关注了这个tutorail 如何将 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 执行

如何检查问题所在?

【问题讨论】:

  • 你在哪里有func onViewDidLoad(){...} ...你的意思是说override func viewDidLoad(){...}?否则,onViewDidLoad() 永远不会被调用,这可能是您问题的根源

标签: ios xcode swift delegates


【解决方案1】:

您是否应该使用 TextManager 代替 NameTextVerifier

var nameTextVerifier = TextManager()
in place of
var nameTextVerifier = NameTextVerifier()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多