我的情节提要中有一个Nib,它没有连接任何东西,但是我将其实例化为子视图:

-(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未正确校准或其他任何原因,因为单击按钮时我可以看到视觉变化。

最佳答案

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

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


您不能简单地实例化视图控制器,然后将其视图手动添加到这样的视图层次结构中。对此有非常严格的规则。为了将视图控制器的视图手动添加到界面中,您必须执行一个精心设计的“舞蹈”,而您并没有在跳舞。

结果是您的cameraVC出现了,在视图控制器层次结构中没有位置,并且烟消云散。因此,您的按钮没有与之交谈的对象,因此当轻按按钮时,什么也不会发生。

我的建议是:对于此视图,请使用.xib文件,而不是情节提要场景。在将其加载并放入界面后,使用代码配置按钮,使其与当前视图控制器self对话。

10-08 08:25
查看更多