【问题标题】:How to show subclass of UIControl in View Controller如何在视图控制器中显示 UIControl 的子类
【发布时间】:2015-05-21 12:52:57
【问题描述】:

我希望能够与我制作的 UIControl 进行交互,因此希望它在我的 ViewController 中。

我尝试了什么

  • 我继承了 UIControl (1)。
  • 然后我向我的视图控制器添加了一个 UIView 并为其分配了新类 (2)。

但在 Interface Builder 中,我无法将插座设置为新类 (1) 中包含的按钮?!

1:



2:



UIControl's documentation 确认它是 UIView 的子类,因此我应该能够连接插座,对吧?

我在这里缺少什么? :/

【问题讨论】:

  • 您是如何尝试连接插座的?在 IB 中选择 WeekdayControl 并转到连接检查器,从那里您可以将插座连接到 IB 中的按钮。
  • 是的,这就是我尝试连接它们的方式。我试图拖放,但似乎没有任何东西愿意连接。 ://

标签: ios swift interface-builder iboutlet uicontrol


【解决方案1】:

你不能添加 IBOutlet,因为你添加到 WeekdayControl 的按钮在 UIViewController,你不能添加 Outlet 到 WeekdayControl,按钮只有 WeekdayControl 的子视图,UIViewController 是老大在这里,您只能将插座添加到UIViewController。 (对不起我的英语)

最好在 WeekdayControl 中以编程方式创建按钮。

【讨论】:

  • 谢谢!这正是我无法理解的 Interface Builder 101。
【解决方案2】:

必读:-

您不能直接使用 UIControl 类来实例化控件。 相反,它定义了通用接口和行为结构 它的所有子类。

UIControl的主要作用是定义一个接口和base 准备动作消息和初始调度的实现 当某些事件发生时,它们会到达目标

所以,你做错了,如果你真的需要制作自定义视图或自定义控件,那么你可以直接通过创建自定义 UIView 并将插座与视图直接连接来实现。

我认为您错过了子类化 UIControl 的目标,因为它是 UIView 的子类,所以它不授予创建出口的权利,只需阅读文档中所述的以下内容即可:-

子类化注释

您可能出于以下两个原因想要扩展 UIControl 子类:

观察或修改动作消息到目标的调度 特定事件

为此,覆盖 sendAction:to:forEvent:,评估传入的 选择器、目标对象或 UIControlEvents 位掩码,然后按 必填。

提供自定义跟踪行为(例如,更改 突出外观)

为此,请覆盖以下一种或所有方法: beginTrackingWithTouch:withEvent:, continueTrackingWithTouch:withEvent:, endTrackingWithTouch:withEvent:.

【讨论】:

  • 但是我制作控件的原因是为了解耦存储在那里的变量,并通过控件访问它们。没有控制,我的视图控制器真的很臃肿。 :/ 我知道这可能不是最佳做法,但我仍然不明白为什么不可能?!
  • 你错了哥们,你说“这可能不是最佳实践”,这根本不是创建自定义控件的方法;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多