Swift - доступ к элементам модального всплывающего окна в UITableViewController для передачи данных из базы данных Firebase в модальные всплывающие элементы - PullRequest
0 голосов
/ 29 апреля 2020

Я новичок в iOS разработке и мне нужна ваша помощь.

Я использую UITableView для создания таблицы задач. Данные задач передаются из базы данных Firebase. Когда я нажимаю кнопку в ячейке задачи, открывается модальное всплывающее окно (в том же ViewController с помощью метода animate).

Я хочу получить доступ к элементам модального всплывающего окна, чтобы передать данные указанного c задача из базы данных в ее модальное окно.

У меня есть файл TaskViewCell со всеми выходами элементов ячейки, такими как previewTitleLabel, previewMotivLabel et c.

Файл TasksListScreen:

import UIKit
import Firebase
import FirebaseAuth
import FirebaseFirestore

class TasksListScreen: UIViewController {
    var db = Firestore.firestore()
    var tasksArray = [Task]() // array of tasks using Task struct

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var centerPopupConstraint: NSLayoutConstraint!
    @IBOutlet weak var backgroundButton: UIButton!

    // show popup  
    @IBAction func yesButtonTapped(_ sender: Any) {
        centerPopupConstraint.constant = 0 // popup appear

        // add slide animation for popup
        UIView.animate(withDuration: 0.3, animations: {
            self.view.layoutIfNeeded()
            self.backgroundButton.alpha = 0.5
        })
    }

    // done button on popup is clicked
    @IBAction func closePopup(_ sender: Any) {
        centerPopupConstraint.constant = -450 // popup disappear

        // add slide animation for popup
        UIView.animate(withDuration: 0.1, animations: {
            self.view.layoutIfNeeded()
            self.backgroundButton.alpha = 0
        })
    }
 }

extension TasksListScreen: UITableViewDataSource, UITableViewDelegate { 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
   return tasksArray.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

   let cell = tableView.dequeueReusableCell(withIdentifier: "taskCell") as! TaskViewCell
   let task = tasksArray[indexPath.row]

   cell.previewTitleLabel.text = task.title  
   cell.previewMotivLabel.text = task.tip  
   cell.previewHashtagsLabel.text = task.hashtags  

   // Here I want to access task's modal window to pass data to its elements:
   // the same task title and task description form database

}}

Пожалуйста, помогите !!

Раскадровка TasksListScreen с модальным всплывающим окном

Иерархия файлов view и TasksListScreen раскадровка

Внешний вид приложения

1 Ответ

0 голосов
/ 09 мая 2020

Ооо, я решил эту проблему.

Для того, чтобы передать данные выбранной строки в новое V C или модальное окно, вам нужно задать идентификатор для перехода между представлениями таблицы V * 1006. * и новый V C, и использовать две функции:

// change VC
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
        performSegue(withIdentifier: "showDetails", sender: self)
} 

// pass the data to new VC
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let destination = segue.destination as? HeroViewController {
            destination.hero = heroes[(tableView.indexPathForSelectedRow?.row)!]
        }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...