我是iOS开发的新手,我遇到了一个看似简单的问题,但无论我尝试哪种方式都无法解决。
我有一个包含2个UI元素的自定义视图类@IBDesignable class ValidatedInputFieldView: UIView
。
其中之一是UITextField
。
ValidatedInputFieldView
已添加到其父视图class ViewController: UIViewController, UITextFieldDelegate
。
我希望ViewController
回复来自textFieldShouldReturn
的{{1}}事件,而不是回复UITextField
所在的ValidatedInputFieldView
。
我已尝试公开UITextField
的{{1}}字段:
delegate
并在UITextView
:
@IBOutlet var textFieldDelegate:UITextFieldDelegate?
然后使用解决方法在IB中链接它: 将插座的类型声明为AnyObject或NSObject,使用Interface Builder将对象连接到插座,然后将插座的类型更改回协议。
但它根本不起作用。
Debug说对象是ValidatedInputFieldView
。
我无法理解Subview中发生的事件是如何传递给Parent视图的,以及我应该使用什么来公开代理。
答案 0 :(得分:0)
我喜欢的典型风格是保留其视图中包含的项目。我要做的是将textFieldShouldReturn
函数放在ValidateInputView
中,并将UITextField
的委托设置为ValidateInputView
。然后,在textFieldShouldReturn
函数中,使用
NSNotificationCenter.defaultCenter().postNotificationName("textFieldFunction", object: self)
并确保您正在使用ViewController
收听:
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: Selector("textFieldFunction:"),
name: "textFieldFunction",
object: nil)
并在textFieldFunction
中创建函数ViewController
来处理它:
func textFieldFunction(notification: NSNotification) {
//Put code to handle return press here
}
请务必将其放在ViewController
中:
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
或没有通知
使用此示例项目中的解决方案: https://mega.nz/#!koYDTZpa!uGZ6oUbKxRaWuGSM9FbCuV0t8oz5mtu35rZlLEL7Ehs
对不起,我会发布代码,但由于它主要是通过IB进行的,所以并不多。