iOS UIButton在以编程方式实例化的子视图中不会触发

时间:2016-05-16 15:24:39

标签: ios objective-c iphone uibutton

我的故事板中有一个Nib,它与任何东西都没有关联,但我将其作为子视图实例化:

-(void)LoadCameraOverlayView
{
    CameraOverlayViewController *cameraVC = [self.storyboard instantiateViewControllerWithIdentifier:@"CameraOverlayNib"];
    cameraVC.view.userInteractionEnabled = YES;
    [self.view addSubview:cameraVC.view];
}

UIViewController有一个带有反馈的相机,工作正常,还有一个按钮(当我转向视图控制器时效果也很好。)

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

当我单击按钮时,我可以看到它在视觉上从默认状态变为聚焦或突出显示状态,但是没有任何代码正在执行。如果我在ViewDidLoad中放置一个NSLog,我可以在控制台中看到它,但不能在链接方法中看到。但是,如果我认为它确实有效。

发生了什么?

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

1 个答案:

答案 0 :(得分:4)

此代码违反了规则1如何使用视图控制器:

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

您不能简单地实例化视图控制器,然后手动将其视图添加到视图层次结构中。对此有非常严格的规定;你必须做一个精心设计的“舞蹈”才能手动将界面控制器的视图添加到你的界面,而你却没有跳舞。

结果是你的cameraVC成立,在视图控制器层次结构中没有任何位置,并且在一阵烟雾中消失。因此,您的按钮无法与之交谈,因此当点按该按钮时,没有任何反应。

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