我正在尝试使用UIImagePickerController
从画廊中挑选一张图片。
如果我的视图控制器未提及UINavigationControllerDelegate
。尝试设置UIImagePickerController
委托时,我将遇到以下错误。
但是只需提及UINavigationControllerDelegate
就可以解决编译时错误。甚至没有实现任何额外的功能。
class ViewController: UIViewController ,UITextFieldDelegate
,UIImagePickerControllerDelegate, UINavigationControllerDelegate
如果有人可以向我解释其背后的原因,那将是不二之选。
我正在使用
Swift 4.2
Xcode 10.1
答案 0 :(得分:2)
在documentation中,您可以看到UIImagePickerController继承自UINavigationController。
查看委托人声明,很明显,它要求您同时确认UIImagePickerControllerDelegate
和UINavigationControllerDelegate
为什么委托要求您同时确认两个协议?
UIImagePickerController
是系统界面。此类旨在原样使用,并且不允许进行视觉修改。从下面的屏幕截图中可以看到,它带有导航栏。
某些UIImagePickerControllerDelegate
方法(例如imagePickerControllerDidCancel(_:)
)需要与UINavigationController
通信才能接收事件。
这就是UIImagePickerController
必须验证您对UINavigationControllerDelegate
进行确认的原因。因此,您正在看到错误。还要注意,UINavigationControllerDelegate
方法是可选的,因此您实际上不需要实现它们,这就是为什么当您提到UINavigationControllerDelegate
时,它只是消除了错误。
答案 1 :(得分:1)
UIImagePickerController的委托定义为
@property(nullable,nonatomic,weak) id <UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate;
因此,您要设置的委托必须符合UINavigationControllerDelegate。
UINavigationControllerDelegate没有必填字段。因此,您无需实现任何函数或变量就可以实现这一点。因此,您的错误得以解决。
答案 2 :(得分:0)
如果您需要监视vc(imagePicker)的显示时间,然后实施UINavigationControllerDelegate
方法,则其原理非常简单,否则它将具有含义,否则将无用,但这是强制性的