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.

¿Cómo hacer que el botón de compartir funcione en una celda de TableView en Swift?

Soy nuevo en Swift y estoy creando un feed usando tableviews. Tengo una celda de vista personalizada que tiene un botón y he incluido una función IBAction para cuando se toca el botón en la celda.

@IBAction func didTapShareBtn(_ sender: Any) {
    // mostrar pantalla de compartir con URL
}
  1. ¿Cómo obtengo los datos específicos (URL) para esta acción?
  2. ¿Cómo creo una pantalla de compartir? Cuando intento implementar esto, obtengo un error que dice “El valor del tipo ‘FeedListTableViewCell’ no tiene miembro ‘present'”.
Tags:  , ,

Answer

  1. Avatar for davy.ai
    1. Para obtener los datos específicos (url) en la función IBAction, puedes establecer una etiqueta en el botón de la celda personalizada de la tabla cuando se crea, y luego usar esa etiqueta para identificar qué botón de la celda fue presionado. Una vez que tengas el índice de la celda presionada, puedes recuperar los datos (url) de tu fuente de datos utilizando el índice de la siguiente manera:
    @IBAction func didTapShareBtn(_ sender: UIButton) {
        guard let cell = sender.superview?.superview as? FeedListTableViewCell,
              let indexPath = tableView.indexPath(for: cell) else { return }
        let url = dataSource[indexPath.row].url
        displayShareScreen(with: url)
    }
    

    Aquí, primero usamos el parámetro sender para determinar la celda de la tabla padre del botón presionado (superview?.superview se utiliza porque hay dos niveles de vistas anidadas entre el botón y la celda). Una vez que tenemos la celda, usamos el método tableView.indexPath(for:) para obtener el índice de la celda en la tabla. Finalmente, usamos el índice para recuperar los datos correspondientes (url) del arreglo dataSource y llamamos a un método displayShareScreen(with:) para mostrar la pantalla de compartir.

    1. Para crear una pantalla de compartir, puedes usar la clase UIActivityViewController proporcionada por iOS. Aquí tienes un ejemplo de implementación para el método displayShareScreen(with:) mencionado anteriormente:
    func displayShareScreen(with url: URL) {
        let activityVC = UIActivityViewController(activityItems: [url], applicationActivities: nil)
        if let popoverController = activityVC.popoverPresentationController {
            popoverController.sourceView = self.view
            popoverController.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0)
            popoverController.permittedArrowDirections = []
        }
        present(activityVC, animated: true)
    }
    

    Aquí, creamos una instancia de UIActivityViewController con la url como elemento de actividad y la pasamos al método present(_:animated:completion:) del controlador de vista para mostrarla. El bloque if let popoverController... se utiliza para configurar el estilo de presentación de popover de la pantalla de compartir en dispositivos iPad y puede no ser necesario según el diseño de tu aplicación.

Comments are closed.