0

我正在以编程方式将 UIView 添加到 superview,并且我想向 UIView 添加一个目标,以便能够在触摸时执行任何操作。为了添加目标,我需要将 UIView 的自定义类设置为 UIControl。通常这是在 IB 中完成的,但是由于我以编程方式进行操作,因此我无法以这种方式进行设置。我试图像这样设置 UIControl,但它不起作用。

subView.class = UIControl;

这样做的正确方法是什么?

4

3 回答 3

2

UIView 的实例没有目标。如果你想要一个目标/动作机制,创建一个 UIControl 的实例。否则,请在您的视图上使用手势识别器。

于 2011-09-06T20:40:52.290 回答
2

您有时在 IB 中将 UIView 的类设置为其他内容(例如 MyView)的原因是您想要创建一个 MyView,但 IB 的库中没有 MyView,因此您不能只将一个 MyView 拖到您的视图中。因此,您改为拖动 UIView 并将其类更改为 MyView。

当您在代码中实例化对象而不是从 .xib 加载它时,这根本没有必要。在代码中,您知道要实例化哪个类,因此只需实例化该类:

MyView *subview = [[MyView alloc] initWithFrame:someFrame];

如果您希望 subview 成为 UIButton,则将其实例化:

UIButton *subview = [UIButton buttonWithType:UIButtonTypeRoundedRect];

不要乱用 isa-swizzling,至少现在不是。如果你问这个问题(问这个问题没有错),你应该把调酒当作一门黑暗的艺术,你可能会在未来的某个时候达到。

于 2011-09-06T20:53:10.103 回答
0

你有两个选择:

  1. 您必须直接创建一个UIControlUIView类,该类具有与视图相同的行为,但您可以使用选择器addTarget:action:forControlEvents:来控制其事件,或者...
  2. 您应该使用UIGestureRecognizer来控制与您的视图的交互。
于 2011-09-06T20:52:40.120 回答