IBOutlets/actions 和自定义子视图

Posted

技术标签:

【中文标题】IBOutlets/actions 和自定义子视图【英文标题】:IBOutlets/actions and custom subview 【发布时间】:2014-08-18 14:37:53 【问题描述】:

如果这似乎是一个简单的问题,我们深表歉意!我正在使用AVFoundation 构建一个自定义相机应用程序,允许用户在拍摄后在图像上绘图(类似于 snapchat)。

我的相机功能正常工作。目前,按下快门按钮后,我添加(作为子视图)标准UIImageView 以显示拍摄的照片。看到我希望在这个阶段有自定义选项(包括在图像上绘图),我开始创建自己的 UIImageView 子类。我正在 Interface Builder(xib 文件)中设计此视图。

例如,我在此自定义视图上有一个按钮,按下该按钮时,只需删除图像并将我带回相机视图以拍摄另一张图像。我可以在相机视图的ViewController 中处理此自定义视图的IBActions 吗?这是不好的做法吗?

任何关于如何最好地实现这一点的指导将不胜感激!谢谢。

【问题讨论】:

【参考方案1】:

我不建议将按钮放在您的自定义视图上。

我会让UIViewController 显示自定义视图,并为您的操作提供显示按钮。 UIViewController 很可能希望在屏幕底部显示UIToolBar,这将允许多个按钮/操作,但这取决于您。

但是我为什么要这么说呢?区隔。您的自定义视图不需要或使用该按钮。这对你的所作所为毫无意义......显示图像。您的自定义视图也可能在许多地方使用,其中一些地方不希望显示此按钮。即使您的自定义视图有按钮,如果有人点击它,它也不知道该怎么做。然后它必须将该交互传递给关心该操作并处理它的视图控制器。您的自定义视图很可能有公共方法,允许其他代码给它指示(如清除或撤消)。

根据实际情况,您可能决定需要一个自定义 UIViewController 来处理自定义视图上的交互。然后任何其他视图控制器都可以将其添加为容器化视图控制器,并且您可以在应用程序的多个位置拥有相同的功能而无需重复代码。

【讨论】:

以上是关于IBOutlets/actions 和自定义子视图的主要内容,如果未能解决你的问题,请参考以下文章

防止 UITableView 在自定义子视图处理触摸时滚动

UIStackView 中等宽的自定义子视图

如何将自定义子视图的宽度设置为没有宽度限制的父 UIView 的 1/3?

iOS 视图上的自定义子视图有空插座

SwiftUI GeometryReader 不会在中心布局自定义子视图

如何在键盘视图和顶视图中添加自定义子视图? (iOS8 及以下无法在 iOS9 中使用)