【问题标题】: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】:

      你有两个选择:

      1. 你必须直接创建一个UIControl,它是一个UIView的子类,这个类具有相同的视图行为,但是你可以使用 选择器addTarget:action:forControlEvents: 来控制其事件, 或者...
      2. 您应该使用UIGestureRecognizer 来控制与您的交互 查看。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-07
          • 2016-07-31
          • 2015-05-25
          相关资源
          最近更新 更多