取消图像选择器后输入附件视图消失[Swift]

时间:2018-01-26 23:49:55

标签: ios swift uiimagepickercontroller inputaccessoryview

我有一个非常标准的inputAccessoryView图片和相册按钮。但我发现,如果在显示键盘时启动专辑(换句话说,textView是第一个响应者),则inputAccessoryView在相册被取消时消失。如何让它停留在屏幕的底部?

我的实施是通用的:

let inputContainerView: UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 40)

override var inputAccessoryView: UIView? {
    return inputContainerView
}

lazy var imagePicker: UIImagePickerController = {
    let picker = UIImagePickerController()
    picker.delegate = self
    return picker
}()

// The function that is hooked up to the album button
func handleAlbum() {
    if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
        imagePicker.sourceType = .photoLibrary
        imagePicker.allowsEditing = false
        present(imagePicker, animated: true, completion: nil)
    }
}

这是一个展示问题的gif。注意inputAccessoryView在最后消失了。非常感谢你!

enter image description here

2 个答案:

答案 0 :(得分:1)

我解决了。事实证明,在呈现图像选择器之前,我需要将textView问到resignFirstResponder()。另外,添加以下代码。它处理用户取消选择操作的情况。

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    picker.dismiss(animated: true, completion: nil)
}

根据Apple文档:

  

您的委托的此方法的实现应该通过调用父视图控制器的dismissModalViewControllerAnimated:方法来关闭选择器视图。

     

此方法的实现是可选的,但是可以预期。

不推荐使用dismissModalViewControllerAnimated:方法,而应使用dismissViewControllerAnimated:completion:

答案 1 :(得分:0)

尝试在取消图片选择器后添加self.inputAccessoryView.becomeFirstResponder()。