【问题标题】:Swift reusable UITextFieldDelegateSwift 可重用 UITextFieldDelegate
【发布时间】:2015-10-08 03:26:14
【问题描述】:

我正在尝试实现一个可重用的UITextFieldDelegate 类,如下所示:

class CustomTextFieldDelegate : NSObject, UITextFieldDelegate

所有委托协议方法均已正确实现。

controller 中,我将delegate 分配给UITextField

textField.delegate = CustomTextFieldDelegate()

问题是没有一个委托函数被调用。但是,当我从控制器实现委托协议时,一切正常

class CustomTableViewController: UITableViewController, UITextFieldDelegate

有什么想法吗?

【问题讨论】:

  • 我猜是这样。由于委托是文本字段中的弱变量,并且没有任何内容保留您的 CustomTextFieldDelegate 实例。它会自动释放。
  • 我猜你必须创建UITextField 的扩展/子类并保留你的代表
  • 我会试试这个。谢谢

标签: ios swift custom-controls uitextfielddelegate


【解决方案1】:

如果您想在整个项目中重用 CustomTextFieldDelegate,您应该使用 Singleton 实例;

textField.delegate = CustomTextFieldDelegate.sharedInstance

班级发生变化

class CustomTextFieldDelegate : NSObject, UITextFieldDelegate {

    static let sharedInstance:CustomTextFieldDelegate = CustomTextFieldDelegate();

    func textFieldDidBeginEditing(textField: UITextField) {
        NSLog("textFieldDidBeginEditing ...");
    }
   //... other methods
} //F.E.

【讨论】:

  • 我不想继承协议。相反,我正在尝试创建一个可以在许多文本字段上使用的可重用委托。
  • @Joe.b 查看我更新的答案。它正在 swift 1.2 上进行测试
  • 做到了。谢谢你。你能解释一下为什么单例可以工作,但创建一个对象却不行吗?
  • 正如@Horst 在上面的评论中已经提到的那样,问题是您没有在任何地方保留 CustomTextFieldDelegate 的实例,因此丢失了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多