我在从collectionViewCell呈现UIImagePicker时遇到了一些麻烦。我知道collectionViewCells默认情况下不作为选择器委托,所以我尝试从UIViewController类调用一个方法来操作持有imageView的单元格。在我的控制台中没有显示错误,但是当我运行应用程序并尝试呈现UIImagePickerController时没有任何反应,我收到“警告:尝试显示其视图不在窗口层次结构中!”。当用户点击profileImageView时,我想呈现UIImagePickerController。在此先感谢您的帮助!
//持有imageView的LoginCell类从LoginController类调用UIImagePickerController方法
lazy var profileImageView: UIImageView = {
let imageView = UIImageView()
imageView.addGestureRecognizer(UITapGestureRecognizer(target:self, action: #selector(handleSelectProfileImage)))
imageView.isUserInteractionEnabled = true
return imageView
}()
var loginController: LoginController?
func handleSelectProfileImage() {
let loginController = LoginController()
loginController.showImagePicker(sendingVC: loginController)
}
// LoginController类为UIImagePickerController委托
func showImagePicker(sendingVC: LoginController) {
let picker = UIImagePickerController()
picker.delegate = self
picker.allowsEditing = true
present(picker, animated: true, completion: nil)
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let loginCell = collectionView.dequeueReusableCell(withReuseIdentifier: loginCellId, for: indexPath) as! LoginCell
loginCell.delegate = self
return loginCell
}
答案 0 :(得分:0)
在你的手机中试试这个:
func handleSelectProfileImage() {
guard let loginController = delegate as? LoginViewController else {
return
}
loginController.showImagePicker()
}
在您的LoginController中
func showImagePicker() {
let picker = UIImagePickerController()
picker.delegate = self
picker.allowsEditing = true
present(picker, animated: true, completion: nil)
}