UIView类也可以是UITextFieldDelegate吗?

时间:2015-08-12 13:58:29

标签: ios swift uiview uitextfield uikit

我是Swift编程的新手,我试图理解为什么我不能使自定义的UIView类也充当TextFields的委托。我已经转换了与ViewController一起使用的代码,但没有太多运气。 错误是: 致命错误:在解包可选值时意外发现nil 这是由行生成的:textField.delegate = self

代码如下:

import UIKit

class ViewClass: UIView, UITextFieldDelegate {

var textItems = [UITextInput]()
var myKB = UIToolbar()
var txtActive = 0

@IBOutlet weak var textField: UITextField!

required init?(coder decoder: NSCoder) {
    super.init(coder: decoder)
    textField.delegate = self
}

// UITextField Delegates
func textFieldDidBeginEditing(textField: UITextField) {
    print("TextField did begin editing method called")
}
func textFieldDidEndEditing(textField: UITextField) {
    print("TextField did end editing method called")
}
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
    print("TextField should begin editing method called")
    return true;
}
func textFieldShouldClear(textField: UITextField) -> Bool {
    print("TextField should clear method called")
    return true;
}
func textFieldShouldEndEditing(textField: UITextField) -> Bool {
    print("TextField should snd editing method called")
    return true;
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    print("While entering the characters this method gets called")
    return true;
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
    print("TextField should return method called")
    textField.resignFirstResponder();
    return true;
}
}

这是不可能的,还是我错过/误解了一些基本的东西?

2 个答案:

答案 0 :(得分:2)

简短回答:您可以将视图设为文本字段的代理,但不应该这样做

查看对象显示数据。控制器对象实现了应用程序的逻辑。您不应该在视图对象中存储模型数据,也不应该在其中包含逻辑。

至于如何做到:

在init中未连接插座。对于视图控制器,可以假设您的插座已连线的地方是viewDidLoad。对于视图对象,可以假定所有内容都已连接的位置是import yaml from jinja2 import Template with open('sample.yml') as fd: data = yaml.load(fd) for k, v in data.items(): t = Template(v) data[k] = t.render(**data) print yaml.safe_dump(data, default_flow_style=False) 方法。您应该实施awakeFromNib()并在那里设置您的代理。

答案 1 :(得分:0)

这不是UITextFieldDelegate的问题,而是你如何设置文本字段。你告诉班级textField是一个IBOutlet,肯定会通过这行代码连接

@IBOutlet weak var textField: UITextField!

但是,当它尝试在init方法中访问textField时,会抛出一个编译器错误,指出textField中没有任何内容。

因此,textField的IBOutlet可能需要连接到相关Storyboard中的某些内容