2016-05-16 54 views
0

我有一个笔尖在我的故事板没有连接到任何东西,但我实例化它作为一个子视图正是如此:的iOS UIButton的编程中的实例子视图不点火

-(void)LoadCameraOverlayView 
{ 

    CameraOverlayViewController *cameraVC = [self.storyboard instantiateViewControllerWithIdentifier:@"CameraOverlayNib"]; 
    cameraVC.view.userInteractionEnabled = YES; 
    [self.view addSubview:cameraVC.view]; 
} 

的UIViewController中已经与反馈的摄像头,工作正常,并且一个按钮(当我继续到视图控制器也可以正常工作)。

该按钮链接到Touch Down事件和Touch Up Inside事件。

当我点击按钮时,我可以看到它从默认状态变为可见状态或突出显示状态,但是没有任何代码正在执行。如果我把一个NSLog放在ViewDidLoad中,我可以在控制台中看到,但不能看到链接的方法。但是,如果我继续看到它的确如此。

任何想法发生了什么?

我看了其他的解决方案,但我不认为这可能是有一个视图的方式或CGRect没有正确校准或任何东西,因为我可以看到点击按钮时的视觉变化。

谢谢。

+0

你在哪里为CameraOverlayViewController中的按钮touchDown和touchUp添加了选择器?在界面构建器中还是以编程方式完成? – Dare

回答

4

此代码违反规则的一个如何使用视图控制器:

CameraOverlayViewController *cameraVC = [self.storyboard instantiateViewControllerWithIdentifier:@"CameraOverlayNib"]; 
[self.view addSubview:cameraVC.view]; 

你不能简单地创建一个视图控制器,然后手动添加它以这样的视图层次结构。对此有非常严格的规定;有一个精心制作的“舞蹈”,你必须做的手动添加一个视图控制器的视图到你的界面,而你没有做舞蹈。

结果是,你的cameraVC成立,在视图控制器层次结构中没有被赋予任何位置,并消失在一片烟雾中。因此没有任何对象可以与您的按钮进行对话,因此当按钮被点击时,什么都不会发生。

我的建议是:使用.xib文件,而不是故事板场景;并且在您将它加载并放入界面后,使用代码来配置按钮,以便它与self,您的当前视图控制器通话。

+0

感谢您的回复,我会研究它。你知道任何资源,可以指出我在正确的方向与如何学习更好的编码实践呢?你可能还能够向我解释如何将xib加载到界面中?最后你是否暗示我使用故事板视图控制器作为委托? – AlecGamble

+0

“你还可以向我解释如何将xib载入界面?”当然;我的在线书籍向你解释:http://www.apeth.com/iOSBook/ch07.html#_nib_loading_and_file_8217_s_owner – matt

+0

这里是一个实际可下载的例子,我只是在做我建议你做的事情(在我的'viewDidLoad' ):我从一个笔尖加载视图,将其放入界面,并在代码中配置其按钮:https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/iOS7bookExamples/bk2ch10p524keyboardAccessory/ch21p808keyboardAccessory /ViewController.m – matt

相关问题