UIImagePickerController和UINavigationControllerDelegate实现

问题描述 投票:1回答:3

我想用UIImagePickerController从画廊中挑选一张图片。

如果我的视图控制器没有提到UINavigationControllerDelegate。尝试设置UIImagePickerController委托时,我会遇到以下错误。

enter image description here

但是只要提到UINavigationControllerDelegate就可以解决编译时错误。甚至没有实现任何额外的功能。

class ViewController: UIViewController ,UITextFieldDelegate 
,UIImagePickerControllerDelegate, UINavigationControllerDelegate

如果有人能够解释我背后的理性,那将是非常可观的。

我在用

Swift 4.2

Xcode 10.1
ios swift uiimagepickercontroller
3个回答
2
投票

screenshot of UIImagePickerController declarationdocumentation你可以看到UIImagePickerController继承自UINavigationController。

screenshot of delegate declaration查看代表声明很明显它需要你确认UIImagePickerControllerDelegateUINavigationControllerDelegate

为什么委托要求您确认两种协议?

UIImagePickerController是一个系统界面。此类旨在按原样使用,不允许进行可视修改。正如您从下面的屏幕截图中看到的,它带有一个导航栏。

UIImagePickerControllerDelegate这样的一些imagePickerControllerDidCancel(_:)方法需要与UINavigationController进行通信才能接收事件。

这就是为什么UIImagePickerController必须验证你确认UINavigationControllerDelegate。因此,你看到了错误。另请注意,UINavigationControllerDelegate方法是可选的,因此您实际上不需要实现它们,这就是为什么它只是在您提及UINavigationControllerDelegate时删除错误。

screenshot of UIIMagePickerController


1
投票

UIImagePickerController的委托定义为

@property(nullable,nonatomic,weak) id <UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate;

因此,您要设置的委托必须符合UINavigationControllerDelegate。

UINavigationControllerDelegate没有必填字段。所以你不需要实现任何函数或变量来符合它。因此,您的错误已解决。

Screenshot of UINavDelegate


0
投票

如果您需要监视vc(imagePicker)何时显示然后实现UINavigationControllerDelegate方法,那么理性非常简单,所以它有意义,否则它是无用的,但它是强制性的

© www.soinside.com 2019 - 2024. All rights reserved.