2016-07-01 7 views
0

私は、ユーザーが一番上の名前の1つを押すようにしようとしています。彼らがそうすると、子TableViewControllerはブールcurrentUserIsLoggedInUserを変更します。ただFactsControllerから送信する方法がある場合親ViewControllerから埋め込まれたTableViewControllerのデータを変更します

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

} 

:私は、コードを持っている私のFactsTableViewControllerで次に

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 { 

     } 
    } 
} 

:私のFactsController

storyboard

私は、コードを持っていますボタンが押されたときにブール値をとると、すべてが簡単になります。

+0

ブール値は変更されません。全く新しいビューコントローラ – Wain

+0

他のViewControllerに、以前のコントローラからの何かが発生したことを知り、ブール値を変更する必要がありますか? –

答えて

2

したい場合:

ボタンが あるときだけFactsControllerからブール値を送信する方法は、あなたがデリゲートを必要とし、その後

を押しました。ストーリーボードでは、このような状況をかなりコントロールすることはできません。あなたのUIをnibファイルに移動し、子VCとして手動でFactsTableViewControllerを追加します。これらのクラスのインスタンスを持つと、代理人を簡単に管理できます。

+0

すみません、少し新しくてすみません。 「あなたのUIをnibファイルに移動したい」と言ったら、どういう意味ですか? – user5812721

+1

問題ありません。ユーザーインターフェイスを表す方法はいくつかあります。 .storyboardファイルを使用すると、通常、すべての画面が表示され、トランジションが管理されます。 "古い"方法は.xibファイルを使用することです。各スクリーンに1つの.xibファイルがあり、1つのビューしか含まれません。この方法では、画面間のすべてのトランジションを管理する必要があります。 あなたの場合、 'FactsController.swift'、' FactsController.xib'、 'FactsTableViewController.swift'、' FactsTableViewController.xib'があります。 "storyboard vs xibs"と "あなたのプロジェクトからストーリーボードを取り除く方法"のトピックを検索することをお勧めします – Valdmer

+0

これは多くをクリアします、ありがとうございます! – user5812721

関連する問題