我想在与UITextFieldDelegate
分开的类中实现UIViewController
,但是当我这样做时,在运行时会收到EXC_BAD_ACCESS
异常。
那么,为什么要这样做:
class MyViewController : UIViewController, UITextFieldDelegate
{
...
func createUI()
{
let someTextField: UITextField = UITextField()
someTextField.delegate = self
...
}
func textFieldShouldReturn(textField: UITextField!) -> Bool
{
textField.resignFirstResponder()
return true;
}
}
但这不是:
class MyViewController : UIViewController
{
...
func createUI()
{
let someTextField: UITextField = UITextField()
someTextField.delegate = MyTextFieldDelegate()
...
}
}
class MyTextFieldDelegate : NSObject, UITextFieldDelegate
{
func textFieldShouldReturn(textField: UITextField!) -> Bool
{
textField.resignFirstResponder()
return true;
}
}
最佳答案
注意delegate
的声明:
unowned(unsafe) var delegate: UITextFieldDelegate?
创建
MyTextFieldDelegate()
并将其分配给delegate
,然后在createUI()
返回时将其释放。它是由ARC释放的,因为没有它拥有。您遇到的问题正是unsafe
警告您的问题。您需要创建对
MyTextFieldDelegate
实例的强引用。您还需要确保在释放文本字段之后才释放委托(delegate)。关于ios - 在单独的类中实现UITextFieldDelegate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28032973/