我有UIViewController
弹出自定义UIView
,需要能够呈现另一个UIViewController
( BarcodeScanViewController )。
当用户完成BarcodeScanViewController
后,数据会传回UIView
以更新标签。
如何使用导航栏显示BarcodeScanViewController
中的UIView
,以便在必要时将其关闭?
下面的代码有点起作用。它显示BarcodeScanViewController
,但它实际上并没有做任何事情。它只是一个黑色的视图。
内部自定义UIView
- (void) startScan {
BarcodeScanViewController * bsvc = [[BarcodeScanViewController alloc] init];
bsvc.delegate = self;
UIViewController *currentTopVC = [self currentTopViewController];
[currentTopVC presentViewController:bsvc animated:YES completion:nil];
}
我也收到警告
分配到
' id< BarcodeScanViewControllerDelegate> '来自不兼容的类型' CustomView * const__strong'
当我尝试分配代表时。
我之前从未从UIView调用过UIViewController。我知道只有一个VC可以调用另一个VC。所以我尝试创建VC以使用演示者。
我做错了什么?
答案 0 :(得分:0)
好的,有一堆较小的东西。我分叉你的回购并修复它,以便你可以看到它是如何工作的。请参阅here。
简而言之:你确实展示了扫描仪VC,但正如我所说,你不能简单地把它放在" over"呈现视图控制器(您的ViewController类)。一旦完成任何表示转换(即动画),就从视图层次结构中移除该ViewController的视图。所以你看到的黑色屏幕只是窗口背景(黑色)。扫描仪的视图是透明的。此外,扫描仪希望您提供一个视图,通过IBOutlet将摄像机渲染(和按钮)。由于你没有从故事板中实例化控制器,你没有设置任何,即用于的视图为零,因此扫描仪想要渲染视频的帧的大小为(0, 0)。 我现在修复了这个问题,希望你现在可以看到呈现一个viewcontroller是如何工作的。要实现一个实际的弹出窗口(使用"以前的视图控制器的基础视图")在iOS上有点困难,但可能有多种方式。如果你愿意,我可以稍后再详细说明。