从父 ViewController 更改嵌入 TableViewController 的数据
Posted
技术标签:
【中文标题】从父 ViewController 更改嵌入 TableViewController 的数据【英文标题】:Change embeded TableViewController's data from parent ViewController 【发布时间】:2016-07-01 16:48:02 【问题描述】:我正在尝试让用户按顶部的其中一个名称。当他们这样做时,子 TableViewController 将更改一个布尔值currentUserIsLoggedInUser
。
在我的FactsController
我有代码:
class FactsController: UIViewController
@IBOutlet weak var currentUserName: UIButton!
@IBOutlet weak var friendUserName: UIButton!
var currentPersonSelectedIsCurrentUser: Bool = false
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
if (segue.identifier == "ChangePersonSegue")
let embed: FactsTableViewController = segue.destinationViewController as! FactsTableViewController
embed.currentPersonSelectedIsCurrentUser = self.currentPersonSelectedIsCurrentUser
embed.refresh //this doesn't call the function like id want it to
func changeFactList()
//segue for table view controller for ___
// call prepareForSegue
performSegueWithIdentifier("ChangePersonSegue", sender: self)
override func viewDidLoad()
//changethings(user)
@IBAction func tappedUserName (sender: UIButton)
if currentPersonSelectedIsCurrentUser
else
currentPersonSelectedIsCurrentUser = true
changeFactList()
currentUserName.titleLabel?.textColor = UIColor.lightGrayColor()
friendUserName.titleLabel?.textColor = UIColor.darkGrayColor()
@IBAction func tappedFriendName (sender: UIButton)
if currentPersonSelectedIsCurrentUser
currentPersonSelectedIsCurrentUser = false
changeFactList()
// change text color
currentUserName.titleLabel?.textColor = UIColor.darkGrayColor()
friendUserName.titleLabel?.textColor = UIColor.lightGrayColor()
else
然后在我的FactsTableViewController
我有代码:
class FactsTableViewController: UITableViewController
let cellID = "factCell"
var currentUserIsLoggedInUser: Bool = false
//var currentUserName: String = ""
var facts = [Fact]()
var currentUser: User!
var soUser: User!
let ref: FIRDatabaseReference = FIRDatabase.database().reference()
override func viewDidLoad()
if currentUserIsLoggedInUser
// make tableview for the current user
else
// make tableview for the friend
func refresh()
self.tableView.reloadData()
如果有一种方法可以在按下按钮时从FactsController
发送一个布尔值,那会让一切变得更容易。
【问题讨论】:
它不会改变布尔值,它是一个全新的视图控制器 你想让另一个 ViewController 知道前一个控制器发生了什么事情并且应该改变它的布尔值吗? 【参考方案1】:如果你愿意:
当按钮被打开时从 FactsController 发送一个布尔值的方法 按下
那么你需要一个代表。尽管如此,故事板并没有让您对这种情况有太多的控制。我会将您的 UI 移动到 nib 文件中,并手动添加 FactsTableViewController
作为子 VC。拥有这些类的实例,您可以更轻松地管理委托。
【讨论】:
对不起,我对 swift 有点陌生。当你说“我会在 nib 文件中移动你的 UI”时,你是什么意思? 没问题。有几种方法可以表示您的用户界面。当您使用 .storyboard 文件时,它通常包含您的所有屏幕并管理转换。 “旧”方式是使用 .xib 文件。每个屏幕都有一个 .xib 文件,它只包含一个视图。这种方法要求您管理屏幕之间的所有转换。在您的情况下,您将拥有:FactsController.swift
、FactsController.xib
、FactsTableViewController.swift
、FactsTableViewController.xib
。我建议你搜索主题“storyboard vs xibs”和“如何从你的项目中删除storyboards”以上是关于从父 ViewController 更改嵌入 TableViewController 的数据的主要内容,如果未能解决你的问题,请参考以下文章
应该从父 ViewController 还是子 ViewController 调用 popViewController?
将数据从父 ViewController 传递到子 VC,无需故事板 - Swift 5
将新的 ViewController 嵌入到现有的 UITabBarController 中?