swift – Basic:以正确的方式连接多个(View-)控制器
我正在尝试设置一个登录屏幕(ViewController),它在成功登录后引导到用户列表(UserTableViewController),它本身就是导航控制器的一部分.在像UserTableViewController这样的后续屏幕上,应该可以注销.这将使用户返回初始登录屏幕ViewController.我正在努力以正确的方式连接这些屏幕.必须说我对不同类型的segue和/或代表没有很多经验,因此,经过一些研究,我去了一些试验:
>成功登录ViewController会触发一个模态segue到导航控制器(它本身通向UserTableViewController) ……看起来这不是一种可行的方式.有些事情在一个循环后变得混乱,屏幕正在改变错误的方式.我想一个模态 – 圆圈是不可能的,因为至少必须有父母和一个孩子.下一次试用: >成功登录ViewController会触发一个modal-segue / push-segue到导航控制器(它本身会导致UserTableViewController) 第三个试验是像第二种方法那样做,但是从ViewController实现了一个segue 当然,我可以在第三个解决方案中进行手动修复,例如插入一个独立的导航栏,但两种方式似乎都没有效率.因此,我非常感谢一些提示,强调我一方面误解(完全)并在另一方面展示了一个很好的方法.非常感谢您的帮助! 编辑: 只是一个视觉帮助: 解决方法
请考虑使用“放松”segue.在ViewController中创建一个函数如下:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) { yourLogoutCode() } 在UserTableViewController控件中 – 从Logout按钮拖动到UserTableViewController的退出符号,这是顶部的第三个按钮,并选择unwindToThisViewController(或您在ViewController中选择的任何名称). 现在,当您单击Logout按钮时,您将返回ViewController并执行unwindToThisViewController,您可以在其中输入注销代码. 这是一个例子: import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view,typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func yourLogoutCode() { println("Logging Out ...") } @IBAction func unwindToThisViewController(segue: UIStoryboardSegue) { self.yourLogoutCode() } } 和UserTableViewController: import UIKit var selectedRow = -1 class UserTableViewController: UITableViewController { var firstArray = ["Item1","Item2","Item3","Item4"] override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } // MARK: - Table view data source override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } override func tableView(tableView: UITableView,numberOfRowsInSection section: Int) -> Int { return firstArray.count } let nameOfCell = "Cell" override func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier(nameOfCell,forIndexPath: indexPath) as UITableViewCell cell.textLabel!.text = firstArray[indexPath.row] return cell } override func tableView(tableView: UITableView,didSelectRowAtIndexPath indexPath: NSIndexPath) { selectedRow = indexPath.row } } 请注意,从“注销”按钮到展开的整个连接都隐藏在故事板中.您可以通过查看Connections Inspector来确认所有这些情况. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |