2014-11-20 67 views
3

所以我已设置了正常工作为UITextField,而是试图以规范的控制,因此它可以在其他视图中重复使用的时候,我似乎无法对其进行初始化/它的工作它和普通的UITextField一样。初始化的UITextField的一个子类中迅速

变量声明为

@IBOutlet weak var searchTextField: SearchTextField! 

然后初始化,并委托设置:

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

但试图设置委托时,我得到EXC_BAD_INSTRUCTION。我已经取出,加入各种初始化方法的子类,我目前的版本有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有关吗?

+0

是否'self'符合'UITextFieldDelegate'? (像'class MyViewController:UIViewController,UITextFieldDelegate') – 2014-11-20 20:55:37

+0

是的,就像那样。 – Tasonir 2014-11-20 22:42:41

回答

1

尽管存在多重问题,我可怕的代码,最终的解决办法是改变的UITextField到SearchTextField在故事板。当然,Aaron也是正确的,因为我错误地覆盖了故事板创建的实例。

3

既然你在代码初始化这一点,不Interface Builder中,从改变你的声明:

@IBOutlet weak var searchTextField: SearchTextField! 

var searchTextField = SearchTextField() 

这将得到释放停止你的看法。

+1

它在故事板实际创建,以及所有此类中的其他IBOutlets的薄弱,以及...如果我拿出self.searchTextField = SearchTextField(),那么我有一个对象,但该地址被列为“一些”令人困惑。更确切地说,我得到这个,当我 'PO self.searchTextField':'有些 { UIKit.UITextField = { UIKit.UIControl = { UIKit.UIView = { UIKit.UIResponder = { ObjectiveC.NSObject = {} } } } } }' – Tasonir 2014-11-20 21:47:06

+2

这很正常。那是因为它是可选的。 'self.searchTextField = SearchTextField()'用新的实例覆盖你的其他文本字段。听起来就像你不想要那样。 – 2014-11-20 22:10:54

+1

我已经把它拿出来了,并且认同它可能不是想要的,但它并没有太大的改变。设置委托似乎可行,但接下来的一行有访问错误。这条线是'self.searchTextField.setPlaceholderText()'这似乎没什么问题... – Tasonir 2014-11-20 22:45:17

1

尝试改变

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

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