我正在尝试设置一个登录屏幕(ViewController
),该屏幕在成功登录后导致用户列表(UserTableViewController
),该用户列表本身是导航控制器的一部分。在UserTableViewController
之类的后续屏幕上,应该可以注销。这会将用户带回初始登录屏幕ViewController
。我正在努力以正确的方式连接这些屏幕。必须说我对不同类型的segue和/或代表没有很多经验,因此,经过一些研究,我进行了一些试验:
ViewController
会触发导航控制器的模态转换(本身会导致UserTableViewController
)UserTableViewController
有一个退出按钮,可以触发另一个模态转换回ViewController
。我采用了这些模态分段,因为首先,我不希望有一个层次结构导致自动创建的后退按钮或类似的东西,其次,我不想在这两个屏幕之间有任何“麻烦”,一个有一个导航控制器,而另一个没有。 ......看起来这不是一种可行的方式。有些事情在一个循环后变得混乱,屏幕正在改变错误的方式。我想一个模态 - 圆圈是不可能的,因为至少必须有父母和一个孩子。下一次试验:
ViewController
会触发导航控制器的模态 - segue / push-segue(它本身会导致UserTableViewController
)UserTableViewController
的委托{正确preparingForSegue
{1}}此时ViewController
无法下载到segue.destinationViewController
但仅限于UserTableViewController
,但不允许我在目的地设置代理(NavigationController
)。第三次试验是像第二种方法那样做,但是从UserTableViewController
实施一个segue
直接到ViewController
。这可能有用,但现在我的UserTableViewController
......已经没有任何导航栏了!
当然,我可以在第三个解决方案中进行手动修复,例如插入一个独立的导航栏,但两种方式似乎都没有效率。因此,我非常感谢一些提示,强调我一方面误解(完全)并在另一方面展示了一个很好的方法。非常感谢您的帮助!
编辑:
我可以尝试将导航控制器设置为初始视图控制器,然后只让UserTableViewController
显示/解除登录屏幕ViewController
- 这是一种实用的方式,还是那些广为人知的最佳实践登录视图方案?
只是一个视觉帮助:
答案 0 :(得分:1)
请考虑使用"放松" Segue公司。在ViewController
创建一个函数如下:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
yourLogoutCode()
}
在UserTableViewController
控件中 - 从“退出”按钮拖动到UserTableViewController
的退出符号,这是顶部的第三个按钮,然后选择unwindToThisViewController
(或您在{中选择的任何名称) {1}})。
现在,当您点击退出按钮时,您将返回ViewController
并执行ViewController
,您可以在其中输入您的退出代码。
以下是一个例子:
unwindToThisViewController
UserTableViewController:
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()
}
}
请注意,从Logout按钮到展开的整个连接都隐藏在Storyboard中。您可以通过查看Connections Inspector来确认所有这些情况。
答案 1 :(得分:0)
This post似乎可以解决您所面临的问题。
另外,对于挑剔并不意味着,但它是“模态”,而非“模块化”:)
答案 2 :(得分:0)
我认为这可能是一种可以接受的方式:
ViewController
)是初始视图控制器@objc(DismissSegue) class DismissSegue: UIStoryboardSegue {
)来覆盖其执行()到(sourceViewController.presentingViewController!!).dismissViewControllerAnimated(true, completion: nil)
UserTableViewController
)中将Dismiss-segue返回到登录视图但是,如果有人知道更好的练习,我很高兴听到!