现在在 viewController 中,我将文本字段委托(delegate)设置为 TextFieldDelegateViewController 类,该类是我定义用于处理文本字段委托(delegate)方法的类。 viewController 实例作为弱函数通过闭包传递。
@IBOutlet weak var numberOfCreatures: UITextField!
{
didSet{
if let selectedIndex = delegate?.getSelectedIndexPath(){
numberOfCreatures.delegate = TextFieldDelegateViewController(){
weak var edit = self
return edit!
}
}
}
}
这是我的TextFieldDelegateViewController类
class TextFieldDelegateViewController: NSObject, UITextFieldDelegate {
weak var editDetailsViewController:EditDetailsViewController?
init(closure: () -> EditDetailsViewController?) {
self.editDetailsViewController = closure()
print("Init... \(self.editDetailsViewController)")
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
print("Writing.....")
if textField.tag == 1{
return handleEditingDescriptionField(with: string, shouldChangeCharactersIn: range)
}else{
return handleEmptyNumberOfCreaturesTextField(with: string)
}
}
}
当我在 View Controller 中将委托(delegate)设置为 self 时,委托(delegate)方法可以正常工作,但如果我将其放在不同的类中,它们甚至不会被调用。我正在尝试将委托(delegate)设置为另一个类,因为我在 View Controller 中有很多委托(delegate)方法并且我想拆分它们。感谢您的帮助。
最佳答案
在下面的代码中,您隐式创建一个局部变量并将其分配给委托(delegate):
numberOfCreatures.delegate = TextFieldDelegateViewController(){
weak var edit = self
return edit!
}
任何局部变量仅存在于创建它的作用域内。你必须把它存放在某个地方。例如,您可以将其存储为 Controller 的变量:
@IBOutlet weak var numberOfCreatures: UITextField!
{
didSet{
if let selectedIndex = delegate?.getSelectedIndexPath(){
textFieldDelegateController = TextFieldDelegateViewController(){
weak var edit = self
return edit!
}
numberOfCreatures.delegate = textFieldDelegateController
}
}
}
var textFieldDelegateController: TextFieldDelegateViewController?
关于ios - 在 Swift 中将 TextField Delegate 设置为 ViewController 中的另一个类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52315904/