Как открыть и выбрать фотографию из фотогалереи, когда пользователь нажимает кнопку (сохранить) - PullRequest
0 голосов
/ 11 октября 2019

Я искал везде, но не могу найти подходящего решения для сохранения и использования фотографии. Я создаю базовое приложение, в котором пользователь должен выбрать изображение, которое позже будет добавлено в массив объекта UIImage. Это приложение состоит из табличного представления, состоящего из городов, в которых был пользователь, и описания. У пользователя есть возможность добавить новый город, описание и изображение. При добавлении нового изображения я пошел и сделал alertController

@IBAction func addCity(_ sender: AnyObject) {
    let alertController = UIAlertController(title: "Add new city", message: "", preferredStyle: UIAlertController.Style.alert)

    alertController.addTextField { (textField : UITextField!) -> Void in
        textField.placeholder = "Enter City Name"
    }
    let saveAction = UIAlertAction(title: "Save", style: UIAlertAction.Style.default, handler: { alert -> Void in
        let firstTextField = alertController.textFields![0] as UITextField
        let secondTextField = alertController.textFields![1] as UITextField

        self.newCity = firstTextField.text!
        self.city.addCity(city: self.newCity)

        self.newDescription = secondTextField.text!
        self.fruitTable.reloadData()

        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary
            ){
            print("Button capture")

            var imagePicker = UIImagePickerController()
            imagePicker.delegate = self as? UIImagePickerControllerDelegate & UINavigationControllerDelegate
            imagePicker.sourceType = UIImagePickerController.SourceType.photoLibrary;
            imagePicker.allowsEditing = false

            self.present(imagePicker, animated: true, completion: nil)
        }

        func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!){
            self.dismiss(animated: true, completion: { () -> Void in

            })

            self.newImage = image
        }
    })
    let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertAction.Style.default, handler: {
        (action : UIAlertAction!) -> Void in })
    alertController.addTextField { (textField : UITextField!) -> Void in
        textField.placeholder = "Enter Description"
    }

    alertController.addAction(saveAction)
    alertController.addAction(cancelAction)

    self.present(alertController, animated: true, completion: nil)
}

. В ходе сеанса я передаю всю информацию в другой элемент управления view, но при выборе фотографии эта информация не передается. Я хотел бы знать, как добавить выбранную фотографию для добавления в массив UIImage.

Я мог бы загрузить весь свой код, если хотите, но это много. Я знаю, что это сбивает с толку, поэтому, если у вас есть какие-либо вопросы, пожалуйста, задавайте. Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

шаг 1 [очень важно] : вы должны установить разрешения в вашем info.plist

как это изображение

ключ Конфиденциальность - Описание использования библиотеки фотографий в info.plist

шаг 2 : ваш контроллер представления должен подтвердить эти протоколы UIImagePickerControllerDelegate, UINavigationControllerDelegate
, а затем вы можете изменить то, что вы хотите, вот простой пример этого

 class MyVC: UIViewController , UIImagePickerControllerDelegate , 
UINavigationControllerDelegate {

let imagePicker = UIImagePickerController()

    override func viewDidLoad() {
     imagePicker.delegate = self
    imagePicker.allowsEditing = false
    imagePicker.sourceType = .photoLibrary
}


func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {

        self.myImageView.image = pickedImage //the image of your image view should be changed here 


    dismiss(animated: true, completion: nil)
}

@IBAction func showGallery(_ sender: UIButton) (){
// the function for showing images from gallery
self.present(imagePicker, animated: true, completion: nil)
}

}
0 голосов
/ 11 октября 2019

Вы должны соответствовать делегату, но вы просто добавляете условное приведение, и оно никогда не работает.

class MyButtonContainerViewController: UIImagePickerControllerDelegate & UINavigationControllerDelegate {

    @IBAction func addCity(_ sender: AnyObject) {
        ,,,
        imagePicker.delegate = self // No casting needed
        ,,,
    }

    // This is the delegate function and must be in the root of the `Class` (not nested in the `addCity` function)
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        picket.dismiss(animated: true, completion: nil)
        let image = info[.originalImage] as! UIImage
        self.newImage = image
        // Append image to the array here
    }
}
...