在许多iOS书籍和教程中,他们演示了如何在界面构建器中基本上将UIView转换为UIControl并让它继承新的更高级别功能以响应点击并表现得像按钮一样。只需在选定的UIView的界面构建器中更改类类型即可完成此操作。
当有人触摸给定视图控制器的“背景”或主视图时,通常会关闭键盘。一旦将UIView的类更改为UIControl,您就可以为TouchUpInside事件发生时分配连接新的IBAction。
现在我明白了这个概念,但它看起来像一个奇怪的Xcode黑客。原因是,我不知道如何以编程方式完成同样的事情。让我解释一下:如果我在代码中创建一个UIView的实例,并且我希望它的行为类似于UIControl,我将如何告诉这个UIView实例我希望它继承自UIControl。现在请记住,我实际上并不想要继承UIControl,因为这会跳过更多的箍,我不认为这是Interface Builder在更改该类类型时所做的事情,或者是它?另外,请记住,UIControl是一个抽象类,不能直接使用,否则我可能会这样做。
最终我的问题是,是否有一种等效的方法可以在纯代码中完成同样的事情并且让UIView成为一个UIControl,这样我就可以为它分配更高级别的事件了?
我希望这是有道理的,如果不是我可以详细说明。
答案 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。