快速初始化 UITextField 的子类

Tas*_*nir 5 initialization subclass uitextfield ios swift

因此,我设置了一个可以正常工作的 UITextField,但是当尝试标准化该控件以便可以在其他视图中重用它时,我似乎无法初始化它/让它像普通 UITextField 一样工作。

该变量声明为

@IBOutlet weak var searchTextField: SearchTextField!
Run Code Online (Sandbox Code Playgroud)

然后初始化并设置委托:

self.searchTextField = SearchTextField()
self.searchTextField.delegate = self
Run Code Online (Sandbox Code Playgroud)

但是当我尝试设置委托时,我得到了 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
    }
}
Run Code Online (Sandbox Code Playgroud)

我确信我的快速语法很糟糕,所以我应该更正的任何其他内容都请告诉我。有什么原因导致 SearchTextField 未设置,初始化后它仍然为零?这是否与 IBOutlet 较弱有关?

Tas*_*nir 1

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