2011-12-24 83 views
0

在许多iOS的书籍和教程他们演示了如何在Interface Builder您可将一个UIView成UIControl并让它继承新的更高层次的功能,以响应点击和行为像按钮的例子。这只需通过更改所选UIView的界面构建器中的类类型来完成。有没有办法让程序从UIControl继承UIView的实例?

这是经常做的时候有人给定的视图控制器的“背景”或主视图倒是取消键盘。一旦将UIView的类更改为UIControl,则只需分配一个新的IBAction,以便在发生TouchUpInside事件时进行操作。

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

最终我的问题是,有没有实现在纯代码同样的事情,有一个UIView成为UIControl,这样我可以分配更高层次的事件,以它等价的方式?

我希望这是有道理的,如果不是我能不能详细。

回答

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 
} 
+0

我明白了你的观点,但正如我根据Apple的文档说的,他们说,我引用:“你不能直接使用UIControl类来实例化控件。” http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIControl_Class/Reference/Reference.html – 2011-12-24 20:18:19

+0

@Ralph正确的,因为它不包括任何种类的UI的任何类型的控制,但这不是你的问题所说的。这是编程方式,你如何做和使用Interface Builder一样的事情。如果您只是将它用作捕捉触摸事件的UIView,那没关系。但是,您最好将UIGestureRecognizer添加到您的视图中,而不是在IB或代码中创建一个空的'UIControl'。 – 2011-12-24 22:12:01

+0

感谢您解决这个问题,现在对我来说很有意义。 – 2011-12-25 02:13:24

0

我创造了厦门国际银行文件。那么新的Objective c类文件继承自 UIView。我在接口生成器中设置了xib类Objective c类,然后将目标c类的超类更改为UIControl。

相关问题