ios - 从父 ViewController 更改嵌入式 UITableViewController 数据

标签 ios swift uitableview uiviewcontroller

我试图让用户按下顶部的其中一个名称。完成后,子 TableViewController 将更改一个 bool 值 currentUserIsLoggedInUser

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 发送一个 bool 值,那将使一切变得容易得多。

最佳答案

如果你想:

a way to just send from the FactsController a boolean when a button is pressed

然后你需要一个代表。不过, Storyboard 并不能使您对这种情况有太多控制。我会将您的 UI 移动到 nib 文件中,并手动添加 FactsTableViewController 作为子 VC。拥有这些类的实例,您可以更轻松地管理委托(delegate)。

关于ios - 从父 ViewController 更改嵌入式 UITableViewController 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38150411/

相关文章:

ios - 如果部分离开屏幕,子 ViewController 安全区域插图不会更新

ios - TestFlight 将每个版本限制为特定用户

ios - 如何避免 IAP 30% 的订阅费用(IOS 应用程序)?

ios - 正确使用 NSThread 和 NSRunLoop

ios - 为什么编译器声称 CGRect 没有宽度成员?

ios - 在 iOS 中单击 UIButton 时更新 UITableView sectionHeaderHeight

ios - 合并两个图像 ios Swift

ios - Swift Spritekit - 仅当 Sprite 处于特定位置时才会发生碰撞?

iOS:隐藏 UITableView 中特定部分的所有行

ios - UITableView 与 estimatedRowHeight 反弹