es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Imágenes de varios botones desde PHPickerViewController

Mi vista tiene cuatro botones. Cuando hace clic en un botón, se ejecuta el PHPickerViewController que permite al usuario seleccionar una imagen de su dispositivo. ¿Cómo puedo saber qué botón se hizo clic para poder establecer la imagen elegida en ese botón específico?

@objc func showImage(sender: UIButton){
    var configuration1 = PHPickerConfiguration(photoLibrary: .shared())
    configuration1.selectionLimit = 1
    configuration1.filter = .images
    let picker = PHPickerViewController(configuration: configuration1)
    picker.delegate = self
    present(picker, animated: true, completion: nil)

}
extension ProfileController: PHPickerViewControllerDelegate {
    func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
        dismiss(animated: true, completion: nil)
        guard !results.isEmpty else {
            return
        }
        for result in results {
            result.itemProvider.loadObject(ofClass: UIImage.self) {
                [weak self]
                object, error in
                DispatchQueue.main.async {
                    guard let self = self else {
                        return
                    }
                    if let image = object as? UIImage {

                }
            }
        }

    }
}

“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para saber qué botón se ha pulsado, puedes establecer una etiqueta para cada botón en la vista. Luego, en la función showImage(sender: UIButton), puedes acceder a la etiqueta del botón emisor usando sender.tag.

    Por ejemplo:

    @objc func showImage(sender: UIButton){
        var configuration1 = PHPickerConfiguration(photoLibrary: .shared())
        configuration1.selectionLimit = 1
        configuration1.filter = .images
        let picker = PHPickerViewController(configuration: configuration1)
        picker.delegate = self
        present(picker, animated: true, completion: nil)
    
        // Establecer etiqueta para el botón emisor
        sender.tag = 1 // Cambia 1 por el número de etiqueta que deseas establecer
    }
    
    extension ProfileController: PHPickerViewControllerDelegate {
        func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
            dismiss(animated: true, completion: nil)
            guard !results.isEmpty else {
                return
            }
            for result in results {
                result.itemProvider.loadObject(ofClass: UIImage.self) {
                    [weak self]
                    object, error in
                    DispatchQueue.main.async {
                        guard let self = self else {
                            return
                        }
                        if let image = object as? UIImage {
    
                            // Establecer la imagen seleccionada en el botón emisor
                            let buttonWithTag = self.view.viewWithTag(1) as? UIButton // Cambia 1 por el número de etiqueta que estableciste
                            buttonWithTag?.setImage(image, for: .normal)
    
                        }
                    }
                }
    
            }
        }
    }
    

Comments are closed.