有没有一种方法可以让一个UIView的实例以编程的方式从UIControl继承



在许多iOS书籍和教程中,他们演示了如何在界面构建器中,你基本上可以将一个UIView变成一个UIControl,并让它继承新的高级功能来响应点击并表现得像按钮一样。这是通过改变所选UIView的接口构建器中的类类型来完成的。

这通常是为了在某人触摸给定视图控制器的"背景"或主视图时关闭键盘。一旦一个UIView的类被改变为一个UIControl,你只需要为TouchUpInside事件发生时分配一个新的IBAction。

现在我明白了这个概念,但它看起来像一个奇怪的Xcode hack。原因是,我不知道如何用程序来完成同样的事情。让我解释一下:如果我在代码中创建了一个UIView的实例我想让它表现得像一个UIControl我怎么告诉这个UIView实例我想让它从UIControl继承。记住,我并不想创建UIControl的子类因为那样会跳过更多的环节我不认为这是Interface Builder在改变类类型时所做的,对吧?另外,请记住UIControl是一个抽象类,不能直接使用,否则我可能会这样做。

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

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

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
}

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

最新更新