ios - Swift:从 View 中获取值(value)的最佳方式

标签 ios swift

我有一个自定义 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/

相关文章:

ios - 如何从 objective-c 方法异步分派(dispatch) C 函数

ios - UITableViewCell 自定义类 - subview 高度约束更改后重新加载单元格高度

ios - 如何在使用 Realm 的同时实现 Codable

ios - 企业经销证书及简介

ios - 如何将渐变层宽度设置为与按钮宽度相同?

json - 如何通过 Swift 4 的 Decodable 协议(protocol)使用自定义 key ?

ios - 如何从 superview 获取所有元素(如 : UiLabel, UITextfield)并设置标签文本颜色和文本字段占位符颜色

ios - SWIFT - 创建/更改长度等于 1 的 NSIndexPath

swift - 如何使系统菜单成为切换按钮而不是下拉菜单

ios - 我如何知道我的应用程序在 Swift 中是从什么状态启动的