我想用UIImagePickerController
从画廊中挑选一张图片。
如果我的视图控制器没有提到UINavigationControllerDelegate
。尝试设置UIImagePickerController
委托时,我会遇到以下错误。
但是只要提到UINavigationControllerDelegate
就可以解决编译时错误。甚至没有实现任何额外的功能。
class ViewController: UIViewController ,UITextFieldDelegate
,UIImagePickerControllerDelegate, UINavigationControllerDelegate
如果有人能够解释我背后的理性,那将是非常可观的。
我在用
Swift 4.2
Xcode 10.1
从documentation你可以看到UIImagePickerController继承自UINavigationController。
查看代表声明很明显它需要你确认UIImagePickerControllerDelegate
和UINavigationControllerDelegate
为什么委托要求您确认两种协议?
UIImagePickerController
是一个系统界面。此类旨在按原样使用,不允许进行可视修改。正如您从下面的屏幕截图中看到的,它带有一个导航栏。
像UIImagePickerControllerDelegate
这样的一些imagePickerControllerDidCancel(_:)
方法需要与UINavigationController
进行通信才能接收事件。
这就是为什么UIImagePickerController
必须验证你确认UINavigationControllerDelegate
。因此,你看到了错误。另请注意,UINavigationControllerDelegate
方法是可选的,因此您实际上不需要实现它们,这就是为什么它只是在您提及UINavigationControllerDelegate
时删除错误。
如果您需要监视vc(imagePicker)何时显示然后实现UINavigationControllerDelegate
方法,那么理性非常简单,所以它有意义,否则它是无用的,但它是强制性的