【问题标题】:How to handle Keyboard Events from Subview in Parent View如何在父视图中处理子视图中的键盘事件
【发布时间】:2015-08-02 23:39:58
【问题描述】:

我是 iOS 开发的新手,遇到了一个看似简单的问题,但无论我尝试哪种方式都无法解决。

我有一个自定义视图类 @IBDesignable class ValidatedInputFieldView: UIView,它包含 2 个 UI 元素。 其中之一是UITextField

ValidatedInputFieldView 被添加到其父视图class ViewController: UIViewController, UITextFieldDelegate

我希望ViewController 响应来自UITextFieldtextFieldShouldReturn 事件,而不是UITextField 所在的ValidatedInputFieldView

我已尝试公开UITextViewdelegate 字段:

@IBOutlet var textFieldDelegate:UITextFieldDelegate?

并将其设置在ValidatedInputFieldView:

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    xibSetup()
    contentTextField.delegate = textFieldDelegate
}

然后使用解决方法将其链接到 IB 中: 将 outlet 的类型声明为 AnyObject 或 NSObject,使用 Interface Builder 将对象连接到 outlet,然后将 outlet 的类型改回协议

但它根本不起作用。

Debug 说对象是nil

我无法理解 Subview 中发生的那些事件是如何传递给 Parent 视图的,以及我应该使用什么来公开委托。

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    我喜欢遵循的典型风格是将项目包含在他们的视图中。我要做的是将textFieldShouldReturn 函数放在ValidateInputView 中,并将UITextField 的委托设置为ValidateInputView。然后,在textFieldShouldReturn 函数中,使用

    发布通知
    NSNotificationCenter.defaultCenter().postNotificationName("textFieldFunction", object: self)
    

    并确保您正在通过ViewController 收听:

    NSNotificationCenter.defaultCenter().addObserver(
        self,
        selector: Selector("textFieldFunction:"),
        name: "textFieldFunction",
        object: nil)
    

    并在ViewController 中创建函数textFieldFunction 来处理它:

    func textFieldFunction(notification: NSNotification) {
        //Put code to handle return press here
    }
    

    确保你也把它放在ViewController 中:

    deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }
    

    OR 表示没有通知

    使用此示例项目中的解决方案: https://mega.nz/#!koYDTZpa!uGZ6oUbKxRaWuGSM9FbCuV0t8oz5mtu35rZlLEL7Ehs

    抱歉,我会发布代码,但代码不多,因为它主要是通过 IB 完成的。

    【讨论】:

    • Tnx 寻求答案。据我所知,NSNotificationCenter 应该在需要 1:N 响应时使用。我的情况不是 1:1 吗?
    • 你说的完全正确!感谢您对此的见解。这是有道理的,我一定会在我的所有项目中遵循该准则。如果我想出一个干净的解决方案,我将尝试使用代表解决您的问题并编辑帖子。
    • 感谢您的帮助。我错过了将委托设置为自我的部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多