Как передать данные из одного представления TabBarController в представление не TabBarController? - PullRequest
0 голосов
/ 03 апреля 2019

Я работаю над проектом, где Initial View имеет PickerView, когда мы выбираем что-то.Я передаю эти данные как String на TabBarController, а затем с TabBarController на каждые 5 его "детей".

На данный момент все отлично работает.

Теперь, нажав TableViewCell, я хочу передать данные от одного из TabBarController's дочерних элементов (ViewController) в представление без TabBarController (FullNewsViewController) и показать это представление.Я пробую несколько методов, и ничего не работает.Можете ли вы мне помочь?

Я работаю над Swift 5 и Xcode 10.2.

Это мой View Controller, из которого я хочу загрузить "FinalTeam":

import UIKit
import FirebaseDatabase

class ViewController: UIViewController, UITableViewDelegate, 
     UITableViewDataSource {

@IBOutlet weak var imageView: UIImageView!
var ref: DatabaseReference?
var refHandle: DatabaseHandle?
var news = [String]()
var FinalTeam = ""

@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var infoLabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    let tabbar = tabBarController as! TabBarViewController
    var FinalTeam = tabbar.Team
   // infoLabel.text = String(describing: tabbar.Team)
    infoLabel.text = FinalTeam
    tableView.delegate = self
    tableView.dataSource = self
    ref = Database.database().reference()
    switch FinalTeam {
    case "Lech Poznań":
        imageView.image = UIImage(named: "leszek")
        refHandle = ref?.child("News/Lech/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)
                self.tableView.reloadData()
            }
        })
    case "Legia Warszawa":
        imageView.image = UIImage(named: "legia")
        refHandle = ref?.child("News/Legia/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })
    case "Lechia Gdańsk":
        imageView.image = UIImage(named: "lechia")
        refHandle = ref?.child("News/Lechia/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })
    case "Wisła Płock":
        imageView.image = UIImage(named: "wisla_p")
        refHandle = ref?.child("News/Wisła_P/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })
    case "Wisła Kraków":
        imageView.image = UIImage(named: "wisla_k")
        refHandle = ref?.child("News/Wisła_K/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })
    case "Jagiellonia Białystok":
        imageView.image = UIImage(named: "jaga")
        refHandle = ref?.child("News/Jaga/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })
    case "Piast Gliwice":
        imageView.image = UIImage(named: "piast")
        refHandle = ref?.child("News/Piast/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })
    case "Pogoń Szczecin":
        imageView.image = UIImage(named: "pogon")
        refHandle = ref?.child("News/Pogoń/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })
    case "Korona Kielce":
        imageView.image = UIImage(named: "korona")
        refHandle = ref?.child("News/Korona/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })
    case "Cracovia":
        imageView.image = UIImage(named: "cracovia")
        refHandle = ref?.child("News/Cracovia/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })
    case "Śląsk Wrocław":
        imageView.image = UIImage(named: "slask")
        refHandle = ref?.child("News/Śląsk/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })
    case "Miedź Legnica":
        imageView.image = UIImage(named: "miedz")
        refHandle = ref?.child("News/Miedź/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })
    case "Zagłębie Sosnowiec":
        imageView.image = UIImage(named: "zaglebie_s")
        refHandle = ref?.child("News/Zagłębie_S/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })
    case "Zagłębie Lubin":
        imageView.image = UIImage(named: "zaglebie_l")
        refHandle = ref?.child("News/Zagłębie_L/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })
    case "Górnik Zabrze":
        imageView.image = UIImage(named: "gornik")
        refHandle = ref?.child("News/Górnik/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })
    case "Arka Gdynia":
        imageView.image = UIImage(named: "arka")
        refHandle = ref?.child("News/Arka/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })

    default:
        imageView.image = UIImage(named: "lech")
        refHandle = ref?.child("News/Lech/Naglowek").observe(.value, with: { (snapshot) in
            let post = snapshot.value as? String
            if let actualPost = post {
                self.news.append(actualPost)

                self.tableView.reloadData()
            }
        })
    }
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return news.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "newsCell")
    cell?.textLabel?.text = news[indexPath.row]
    return cell!
}

}

Это мой FullNewsViewController, куда я хочу отправить эти данные:

import UIKit
import FirebaseDatabase

class FullNewsViewController: UIViewController,UITextViewDelegate {


@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var contentTextView: UITextView!
@IBAction func button(_ sender: Any) {
    navigationController?.popViewController(animated: true)
    dismiss(animated: true, completion: nil)
}

var ref: DatabaseReference?
var refHandleTitle: DatabaseHandle?
var refHandleContent: DatabaseHandle?
var news = [String]()
var FinalTeam = ""

override func viewDidLoad() {
    super.viewDidLoad()
    ref = Database.database().reference()
    contentTextView.delegate = self

    switch FinalTeam {
    case "Lech Poznań":
        //imageView.image = UIImage(named: "leszek")
        refHandleTitle = ref?.child("News/Lech/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Lech/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    case "Legia Warszawa":
        //imageView.image = UIImage(named: "legia")
        refHandleTitle = ref?.child("News/Legia/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Legia/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    case "Lechia Gdańsk":
        //imageView.image = UIImage(named: "lechia")
        refHandleTitle = ref?.child("News/Lechia/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Lechia/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    case "Wisła Płock":
        //imageView.image = UIImage(named: "wisla_p")
        refHandleTitle = ref?.child("News/Wisła_P/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Wisła_P/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    case "Wisła Kraków":
        //imageView.image = UIImage(named: "wisla_k")
        refHandleTitle = ref?.child("News/Wisła_K/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Wisła_K/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    case "Jagiellonia Białystok":
        //imageView.image = UIImage(named: "jaga")
        refHandleTitle = ref?.child("News/Jaga/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Jaga/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    case "Piast Gliwice":
       // imageView.image = UIImage(named: "piast")
        refHandleTitle = ref?.child("News/Piast/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Piast/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    case "Pogoń Szczecin":
       // imageView.image = UIImage(named: "pogon")
        refHandleTitle = ref?.child("News/Pogoń/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Pogoń/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    case "Korona Kielce":
       // imageView.image = UIImage(named: "korona")
        refHandleTitle = ref?.child("News/Korona/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Korona/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    case "Cracovia":
        //imageView.image = UIImage(named: "cracovia")
        refHandleTitle = ref?.child("News/Cracovia/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Cracovia/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    case "Śląsk Wrocław":
       // imageView.image = UIImage(named: "slask")
        refHandleTitle = ref?.child("News/Śląsk/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Śląsk/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    case "Miedź Legnica":
       // imageView.image = UIImage(named: "miedz")
        refHandleTitle = ref?.child("News/Miedź/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Miedź/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    case "Zagłębie Sosnowiec":
       // imageView.image = UIImage(named: "zaglebie_s")
        refHandleTitle = ref?.child("News/Zagłębie_S/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Zagłębie_S/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    case "Zagłębie Lubin":
       // imageView.image = UIImage(named: "zaglebie_l")
        refHandleTitle = ref?.child("News/Zagłębie_L/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Zagłębie_L/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    case "Górnik Zabrze":
       // imageView.image = UIImage(named: "gornik")
        refHandleTitle = ref?.child("News/Górnik/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Górnik/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    case "Arka Gdynia":
      //  imageView.image = UIImage(named: "arka")
        refHandleTitle = ref?.child("News/Arka/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Arka/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })

    default:
      //  imageView.image = UIImage(named: "lech")
        refHandleTitle = ref?.child("News/Lech/Naglowek").observe(.value, with: { (snapshot) in
            let titlePost = snapshot.value as? String
            if let actualTitlePost = titlePost {
                self.news.append(actualTitlePost)
            }
            self.titleLabel.text = titlePost
        })
        refHandleContent = ref?.child("News/Lech/Tresc").observe(.value, with: { (snapshot) in
            let contentPost = snapshot.value as? String
            if let actualContentPost = contentPost {
                self.news.append(actualContentPost)
            }
            self.contentTextView.text = contentPost
        })
    }
}

}

Это мой раскадровка

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Без использования делегатов: - Определите объект данных на TargetViewController и присвойте значение на TabBarController.

let storyboard = UIStoryboard(name: "QpayRegistartion", bundle: nil)

    func routeToTargetViewController(){
      let targetViewControllerObj = storyboard..instantiateViewController(withIdentifier:storyBoardIdentifiersVC) as! TargetViewController
    targetViewControllerObj.dataObject = value //Its your data object to pass.
    self.vc.navigateToViewController(targetViewControllerObj)
    }

Для перехода от раскадровки: -

//Pass data in prepareForSegue method like this:-
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// From your TabBar's ViewController.
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    let destinationVC = segue.destinationViewController as FullNewsViewController
destinationVC.FinalTeam = self.FinalTeam

    }

Для болееуточнение: - CheckThis

0 голосов
/ 03 апреля 2019

Нам нужно знать связь между вашим «дочерним» контроллером представления и вашим «не TabBarController», чтобы определить, какой путь является подходящим.

В общем, есть несколько процедур, и они зависят отситуация.Во-первых, переслать данные.Обычно он используется, когда вы создаете новый экран и хотите передать данные с предыдущего экрана:

private func showUsersViewController(_ users: [User]) {
    let controller = UIStoryboard(name: "User", bundle: nil).instantiateViewController(withIdentifier: "UserListViewController") as! UserListViewController
    controller.users = users
    present(controller, animated: true, completion: nil)
    // navigationController?.pushViewController(controller, animated: true)
}

Но если вы хотите получить информацию обратно, например, в приведенном выше случае, когда пользователь нажимаетвы будете делать что-то на этом экране, вы будете использовать делегатов.

private func showUsersViewController(_ users: [User]) {
    let controller = UIStoryboard(name: "User", bundle: nil).instantiateViewController(withIdentifier: "UserListViewController") as! UserListViewController
    controller.users = users
    controller.delegate = self
    present(controller, animated: true, completion: nil)
    // navigationController?.pushViewController(controller, animated: true)
}

и в контроллере списка пользователей

protocol UserListViewControllerDelegate: class {
    func userListViewController(_ sender: UserListViewController, didSelectUser user: User)
}

class UserListViewController: UIViewController, UITableViewDelegate {

    weak var delegate: UserListViewControllerDelegate?

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        delegate?.userListViewController(self, didSelectUser: users[indexPath.row])
    }

}

Затем вернитесь в контроллер основного вида

extension ViewController: UserListViewControllerDelegate {

    func userListViewController(_ sender: UserListViewController, didSelectUser user: User) {
        self.user = user
        self.reloadUI()
    }

}

Таким образом, в этом случае у вас есть 2 контроллера представления одновременно, которые могут связываться друг с другом в обоих направлениях.

Этих двух процедур обычно достаточно, чтобы решить практически любую связь между двумя контроллерами представления.Но есть и другие способы, такие как использование селекторов, использование уведомлений, MVVM ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...