2016-07-01 51 views
0

我試圖讓用戶按頂部的名稱之一。當他們這樣做時,子TableViewController將更改布爾值currentUserIsLoggedInUser從父ViewController更改嵌入的TableViewController的數據

storyboard

在我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發一個按鈕被按下時的布爾值,這會使一切變得更容易。

+0

它不會更改布爾值,它是一個全新的視圖控制器 – Wain

+0

您是否希望其他其他ViewController知道前一個控制器發生了什麼並且它應該更改其布爾值? –

回答

2

如果你想:

辦法剛剛從FactsController發送一個布爾值當按鈕被按下

,那麼你需要一個代表。儘管如此,故事板並沒有給你太多的控制權。我會將你的用戶界面移動到nib文件中,並且手動添加FactsTableViewController作爲子VC。擁有這些類的實例,您可以更輕鬆地管理代表。

+0

對不起,我對swift有點新東西。當你說「我將你的UI移動到nib文件中」時,你的意思是什麼? – user5812721

+1

沒問題。有幾種方法可以表示您的用戶界面。當您使用.storyboard文件時,它通常包含您的所有屏幕並管理轉場。 「舊」的方式是使用.xib文件。每個屏幕上都會有一個.xib文件,它只包含一個視圖。這種方法要求您管理屏幕之間的所有轉換。 在你的情況下你會有:'FactsController.swift','FactsController.xib','FactsTableViewController.swift','FactsTableViewController.xib'。 我建議你搜索主題「storyboard vs xibs」和「如何從你的項目中刪除故事板」 – Valdmer

+0

這清理了很多,非常感謝你! – user5812721

相關問題