在Swift 2中从Child Element执行TabViewController中的函数

时间:2016-06-08 18:06:32

标签: ios swift

我有一个Tab View Controller,里面是一个Table View Controller。

当点击表格单元格时,我想执行一个以必须从选项卡视图调用的segue结束的函数。

然而,虽然我可以在Table Cell tap上执行该功能,但它不会调用父函数。

相关代码

SettingsTableViewController

protocol settingsTableViewControllerDelegate {
    func settingsTableViewControllerDidPressButton(settingsTableViewController: SettingsTableViewController)
}

class SettingsTableViewController: UITableViewController {

    var delegate:settingsTableViewControllerDelegate?

    //...

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
        let row = indexPath.row
        if row == 0 {
            let refreshAlert = UIAlertController(title: "Log Out", message: "Are you sure?", preferredStyle: UIAlertControllerStyle.Alert)
            refreshAlert.addAction(UIAlertAction(title: "Log Out", style: .Default, handler: { (action: UIAlertAction!) in
                print("Confirmed Log Out")
                self.delegate?.settingsTableViewControllerDidPressButton(self) } ))
            refreshAlert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: { (action: UIAlertAction!) in
                print("Cancelled Log Out") } ))
            presentViewController(refreshAlert, animated: true, completion: nil)
        }
}

DashboardTabViewController

class dashboardTabBarController: UITabBarController, settingsTableViewControllerDelegate {

    func settingsTableViewControllerDidPressButton(settingsTableViewController: SettingsTableViewController) {
        print("Executing log out function")
        let defaults = NSUserDefaults.standardUserDefaults()
        defaults.removeObjectForKey("email")
        defaults.removeObjectForKey("password")
        defaults.removeObjectForKey("userid")
        self.performSegueWithIdentifier("dashboardToHome", sender: nil)
    }
}

“确认注销”语句将打印到控制台。但不是“执行退出功能”。

如何调用此功能?

1 个答案:

答案 0 :(得分:0)

你应该使用闭包来实现这种功能。在选项卡视图控制器中,您只需要通过执行以下操作来引用表视图控制器:

// in tab view controller viewDidLoad
let tableViewController = self.viewControllers[indexOfTableViewController] as! YourTableViewController
tableViewController.segueClosure = {
    performSegueWithIdentifier("segueId", sender: self)
}

然后在函数" 的末尾以一个必须从选项卡视图调用的segue结束。" ,你只需调用该闭包:

// in YourTableViewController
segueClosure()