gpt4 book ai didi

ios - 如何将数据从 TabBarController View 之一传递到非 TabBarController View ?

转载 作者:行者123 更新时间:2023-11-29 05:52:58 29 4
gpt4 key购买 nike

我正在开发一个项目,当我们选择某些内容时,Initial View 有一个 PickerView。我将此数据作为 String 传递给 TabBarController,然后从 TabBarController 传递给他的每 5 个“ child ”。

到目前为止,一切正常。

现在,通过单击 TableViewCell,我想将数据从 TabBarController 的 子级 (ViewController) 传递到非 TabBarController View ( FullNewsViewController) 并显示此 View 。我尝试了几种方法,但没有任何效果。你能帮我吗?

我正在使用 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
})
}
}

}

This is my Storyboard

最佳答案

我们需要知道您的“子” View Controller 和“非 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)
}

但是,如果您想取回信息,例如在上述情况下,当用户被按下时,您将在此屏幕上执行某些操作,则可以使用委托(delegate)。

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)
}

在用户列表 Controller 中

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])
}

}

然后回到主视图 Controller

extension ViewController: UserListViewControllerDelegate {

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

}

因此,在这种情况下,您同时有 2 个 View Controller ,它们可以在两个方向上相互通信。

这两个过程通常足以解决两个 View Controller 之间的几乎所有通信。但还有其他方法,例如使用选择器、使用通知、MVVM...

关于ios - 如何将数据从 TabBarController View 之一传递到非 TabBarController View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55494779/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com