我有一个自定义 UIView(称为 GridView),我对其进行了初始化,然后将其添加到 ViewController (DetailViewController)。 GridView 包含几个 UIButtons,我想在 DetailViewController 中知道这些按钮何时被触摸。我是 Swift 的新手,想知道获取这些事件的最佳模式是什么?
最佳答案
如果您想对通知执行此操作,请使用 1 :
func postNotificationName(_ notificationName: String,
object notificationSender: AnyObject?)
在您的按钮触发的方法中。然后,在您的 DetailViewController
中,在使用 2 初始化时添加一个监听器:
func addObserver(_ notificationObserver: AnyObject,
selector notificationSelector: Selector,
name notificationName: String?,
object notificationSender: AnyObject?)
这两个函数都可以从 NSNotificationCenter.defaultCenter()
调用。
另一种方法是在初始化 DetailViewController
中的 GridView
后添加回调。回调本质上是一个闭包:
var callback : (() -> Void)?
您可以在需要时实例化,例如
// In DetailViewController initialization
gridView = GridView()
gridView.callback = { self.doSomething() }
在 GridView
中,您可以像这样触发回调:
func onButton()
{
callback?()
}
回调只会在解包成功时执行。请确保您已阅读 Automatic Reference Counting ,因为这些构造可能会导致强引用循环。
有什么区别?您只能连接一次回调(至少使用我在此处展示的方法),但当它触发时,接收方会立即执行其代码。对于通知,您可以有多个接收者,但事件传递会有一些延迟。
关于ios - Swift:从 View 中获取值(value)的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28039956/