来自collectionViewCell类的UIImagePickerController

时间:2017-08-10 00:30:14

标签: swift delegates uiimagepickercontroller uicollectionviewcell

我在从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
 }

1 个答案:

答案 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)
}