从 Connections Inspector 中隐藏 Outlets 以获取自定义视图

Posted

技术标签:

【中文标题】从 Connections Inspector 中隐藏 Outlets 以获取自定义视图【英文标题】:Hide Outlets from Connections Inspector for Custom View 【发布时间】:2015-08-21 14:40:48 【问题描述】:

我在 Swift 中使用nib 文件创建了一个自定义视图(数量视图)。我在自定义视图中创建了一些 IBOutletsIBActions(用于按钮、标签等)。

我尝试通过将类名分配给我的故事板中的UIView 来使用此自定义视图(数量视图)。 它显示了 Connections Inspector 中的所有 IBOutletsIBActions,如下图所示:。

我只想为自定义视图显示 delegate

可能的答案:

我想我可以使用 -viewWithTag 而不是 Outlets 来获取视图。

但是,我想知道是否可以同时拥有 Outlets 或者是否有更好的方法来做到这一点?

处理这种情况的其他可能方法(最佳)是什么?

【问题讨论】:

您已为您的属性和操作添加了 IBOutlet 属性。为什么不希望 Connections Inspector 显示它? IBOutlet 是 Connections Inspector 的开关。 @HarrisonXi:我的自定义视图非常复杂,我不想只通过编码来设计它,所以我使用单独的 xib 来设计它,但是为了访问我需要的其他 UI 组件在自定义视图类中采用IBOutlets,我也不想使用viewWithTag 方法。我只是想知道有没有其他方法。 不,不可能隐藏 IBOutlets 和 IBAction Connections Inspector。如果您不想在 Connections Inspector 中显示,请从属性中删除 IBOutlet 关键字。 【参考方案1】:

您还可以考虑以下解决方案: 您可以获取 QuantityViews(自定义视图)的子视图,并且可以通过其框架来源识别特定视图。 注意:你应该知道 customview 子视图框架

【讨论】:

【参考方案2】:

如果您将类成员声明为 IB(IBOutlets 或 IBActions),则无法从情节提要中隐藏 IBOutlets。

IBOutlets 或 IBActions 只是接口构建器的指示符,因此当您尝试绑定它们时它可以在上面显示名称,它实际上调用 setValue:forKey: 方法来设置视图对 IBOutlet 属性的引用。

现在,如果您尝试在没有任何 IBoutlets 的情况下从文件的所有者类访问子视图,您需要有一个指向它的指针,因此您可以使用由界面生成器分配给子视图的 ObjectID 获取引用或者您可以使用 viewWithTag: 方法获取它。

在视图中添加或替换子视图时需要一直查找的ObjectID,因此更好更方便的方法是使用UIView类的tag属性。

所以我对这个问题的结论是使用前面提到的 viewWithTag 方法访问视图。

【讨论】:

UIKit 组件好像不是用 Nibs 创建的。如果是这样,那么我们会在 InterfaceBuilder 中看到很少的内部@IBOutlets,或者他们有隐藏它的工具。【参考方案3】:

我认为你的方法是正确的。但有时 Xcode 不能正常工作。 以下使 IBOutlets 和 IBActions 重新出现并正常工作:

    在 Xcode 中清理项目。

    完全退出 Xcode。

    删除 ~/Library/Developer/Xcode/DerivedData/ 的所有内容。

    重启 MacOS 以防万一。

希望你能解决这个问题:)

【讨论】:

以上是关于从 Connections Inspector 中隐藏 Outlets 以获取自定义视图的主要内容,如果未能解决你的问题,请参考以下文章

从 Xcode Inspector 获取自定义颜色 RGB 代码 [重复]

Unity 从Inspector界面打开资源管理器选择并记录文件路径

jQuery 拖放后 CSS 未正确更新,但在 Inspector 中更新

Chrome HTML Inspector:复制原始源(而不是修改过的 DOM)

无法从 Safari Web Inspector 向 iOS 设备发送控制台命令

如何在 WebKit Inspector 元素视图中展开所有元素?