我正在以编程方式将 UIView 添加到 superview,并且我想向 UIView 添加一个目标,以便能够在触摸时执行任何操作。为了添加目标,我需要将 UIView 的自定义类设置为 UIControl。通常这是在 IB 中完成的,但是由于我以编程方式进行操作,因此我无法以这种方式进行设置。我试图像这样设置 UIControl,但它不起作用。
subView.class = UIControl;
这样做的正确方法是什么?
我正在以编程方式将 UIView 添加到 superview,并且我想向 UIView 添加一个目标,以便能够在触摸时执行任何操作。为了添加目标,我需要将 UIView 的自定义类设置为 UIControl。通常这是在 IB 中完成的,但是由于我以编程方式进行操作,因此我无法以这种方式进行设置。我试图像这样设置 UIControl,但它不起作用。
subView.class = UIControl;
这样做的正确方法是什么?
UIView 的实例没有目标。如果你想要一个目标/动作机制,创建一个 UIControl 的实例。否则,请在您的视图上使用手势识别器。
您有时在 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,至少现在不是。如果你问这个问题(问这个问题没有错),你应该把调酒当作一门黑暗的艺术,你可能会在未来的某个时候达到。
你有两个选择:
UIControl
子UIView
类,该类具有与视图相同的行为,但您可以使用选择器addTarget:action:forControlEvents:
来控制其事件,或者...UIGestureRecognizer
来控制与您的视图的交互。