有没有办法让UIView的实例以编程方式从UIControl继承?

时间:2011-12-24 20:03:52

标签: ios xcode interface-builder

在许多iOS书籍和教程中,他们演示了如何在界面构建器中基本上将UIView转换为UIControl并让它继承新的更高级别功能以响应点击并表现得像按钮一样。只需在选定的UIView的界面构建器中更改类类型即可完成此操作。

当有人触摸给定视图控制器的“背景”或主视图时,通常会关闭键盘。一旦将UIView的类更改为UIControl,您就可以为TouchUpInside事件发生时分配连接新的IBAction。

现在我明白了这个概念,但它看起来像一个奇怪的Xcode黑客。原因是,我不知道如何以编程方式完成同样的事情。让我解释一下:如果我在代码中创建一个UIView的实例,并且我希望它的行为类似于UIControl,我将如何告诉这个UIView实例我希望它继承自UIControl。现在请记住,我实际上并不想要继承UIControl,因为这会跳过更多的箍,我不认为这是Interface Builder在更改该类类型时所做的事情,或者是它?另外,请记住,UIControl是一个抽象类,不能直接使用,否则我可能会这样做。

最终我的问题是,是否有一种等效的方法可以在纯代码中完成同样的事情并且让UIView成为一个UIControl,这样我就可以为它分配更高级别的事件了?

我希望这是有道理的,如果不是我可以详细说明。

2 个答案:

答案 0 :(得分:2)

UIControl继承自UIView,因此如果您想以编程方式执行此操作,则只需创建UIControl的实例。因此,如果您以编程方式创建视图控制器的视图,则可以执行以下操作:

- (void)loadView
{
  CGRect viewSize = /* some appropriate default size */
  UIControl* myControlView = [[UIControl alloc] initWithFrame:viewSize];
  // configure your control (e.g., set events, etc)
  [self setView:myControlView];
  [myControlView release]; // omit this line if using ARC
}

答案 1 :(得分:0)

  

我创建了xib文件。然后新的Objective c类文件继承自   UIView的。我在界面构建器和设置中设置了xib类Objective c类   然后将Objective c类的超类更改为UIControl。