ios - 在 Swift 中将 TextField Delegate 设置为 ViewController 中的另一个类不起作用

标签 ios swift uiviewcontroller

现在在 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/

相关文章:

ios - 自动旋转模态视图

ios - 从第四个 View Controller 快速转到 Root View Controller

swift - 如何从嵌套枚举中获取所有值?

ios - CSS 未在 WKWebView 中加载

swift - 从 1 viewcontroller 转到另一个

ios - 在 Swift 中组合两个数组以形成带有部分的表

iphone - 直接使用 UIViewControllers.view 或 UIView 的内存消耗

ios - 如何创建具有两个 TableView 的 View ,每个 TableView 在每一行上重复使用一个 pickerview

iphone - 像 Cocoa 一样抽象 UIViewController

ios - 如何在关闭 ViewController 时将数据传递给另一个 Controller ?