在swift中初始化UITextField的子类

时间:2014-11-20 20:37:39

标签: ios swift initialization uitextfield subclass

所以我设置了一个正常工作的UITextField,但是当试图将控件标准化以便可以在其他视图中重用时,我似乎无法初始化它/让它以相同的方式工作它作为一个简单的UITextField。

变量声明为

@IBOutlet weak var searchTextField: SearchTextField!

然后初始化并设置委托:

self.searchTextField = SearchTextField()
self.searchTextField.delegate = self

但是在尝试设置委托时我得到了EXC_BAD_INSTRUCTION。我已经取出并向子类中添加了各种init方法,我当前的版本有3个可能有点过分,但它们会阻止编译器抱怨:

import Foundation

class SearchTextField : UITextField
{
    override init()
    {
        super.init()
    }

    override init(frame:CGRect)
    {
        super.init(frame:frame)
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }


    func setPlaceholderText()
    {
        let searchIconCharacter: Character = "\u{1F50D}"
        let searchFieldPlaceholder: String = "\(searchIconCharacter) Where to?"
        self.placeholder = searchFieldPlaceholder
    }
}

我确信我的快速语法很糟糕,所以我应该纠正的任何事情让我知道。有什么东西导致SearchTextField没有被设置,它在初始化后仍然是零?它与弱IBOutlet有关吗?

3 个答案:

答案 0 :(得分:3)

由于您是在代码而不是界面构建器中初始化它,因此请从以下位置更改声明:

@IBOutlet weak var searchTextField: SearchTextField!

var searchTextField = SearchTextField()

这将阻止您的视图被取消分配。

答案 1 :(得分:1)

尝试更改

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

答案 2 :(得分:1)

虽然我的可怕代码存在多个问题,但最终的解决方案是在故事板中将UITextField更改为SearchTextField。当然,Aaron也错了,我错误地覆盖了故事板创建的实例。

相关问题