我有一个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)
}
}
“确认注销”语句将打印到控制台。但不是“执行退出功能”。
如何调用此功能?
答案 0 :(得分:0)
你应该使用闭包来实现这种功能。在选项卡视图控制器中,您只需要通过执行以下操作来引用表视图控制器:
// in tab view controller viewDidLoad
let tableViewController = self.viewControllers[indexOfTableViewController] as! YourTableViewController
tableViewController.segueClosure = {
performSegueWithIdentifier("segueId", sender: self)
}
然后在函数" 的末尾以一个必须从选项卡视图调用的segue结束。" ,你只需调用该闭包:
// in YourTableViewController
segueClosure()