【问题标题】:Set custom class of UIView programmatically?以编程方式设置 UIView 的自定义类?
【发布时间】:2011-11-11 15:44:33
【问题描述】:
我正在以编程方式将 UIView 添加到 superview,并且我想向 UIView 添加一个目标,以便能够在触摸时执行任何操作。为了添加目标,我需要将 UIView 的自定义类设置为 UIControl。通常这是在 IB 中完成的,但是由于我以编程方式进行操作,因此我无法以这种方式进行设置。我尝试这样设置 UIControl,但它不起作用。
subView.class = UIControl;
这样做的正确方法是什么?
【问题讨论】:
标签:
objective-c
ios
class
uiview
uicontrol
【解决方案1】:
您有时在 IB 中将 UIView 的类设置为其他内容(例如 MyView)的原因是您想创建一个 MyView,但 IB 的库中没有 MyView,因此您不能只将其拖入你的看法。因此,您改为拖动 UIView 并将其类更改为 MyView。
当您在代码中实例化一个对象而不是从 .xib 加载它时,这根本没有必要。在代码中,您知道要实例化哪个类,因此您只需实例化该类:
MyView *subview = [[MyView alloc] initWithFrame:someFrame];
如果您希望子视图成为 UIButton,则改为实例化它:
UIButton *subview = [UIButton buttonWithType:UIButtonTypeRoundedRect];
不要乱用 isa-swizzling,至少现在不要。如果您要问这个问题(而且问这个问题并没有错),您应该将 swizzling 视为您可能在未来某个时候达到的黑暗艺术。
【解决方案2】:
你有两个选择:
- 你必须直接创建一个
UIControl,它是一个UIView的子类,这个类具有相同的视图行为,但是你可以使用
选择器addTarget:action:forControlEvents: 来控制其事件,
或者...
- 您应该使用
UIGestureRecognizer 来控制与您的交互
查看。