【发布时间】:2014-09-12 17:43:17
【问题描述】:
我正在尝试设置一个登录屏幕 (ViewController),它会在成功登录后引导至用户列表 (UserTableViewController),该用户列表本身就是导航控制器的一部分。在随后的屏幕上,如UserTableViewController,应该可以注销。这将使用户回到初始登录屏幕ViewController。我真的很难以正确的方式连接这些屏幕。必须说,我对不同类型的 segue 和/或代表没有太多经验,所以在完成一些研究后,我进行了一些试验:
- 在
ViewController上成功登录会触发导航控制器的模态搜索(它本身会导致UserTableViewController) -
UserTableViewController有一个注销按钮,可触发另一个模式切换回ViewController。我采用了这些模态序列,因为首先,我不想有一个导致自动创建的后退按钮或类似按钮的层次结构,其次,我不想在这两个屏幕之间有任何“麻烦”,一个有导航控制器,而另一个没有。
...看起来这不是一条路。有些事情在一个循环之后会变得混乱,并且屏幕会以错误的方式改变。我想模态转圈是不可能的,因为至少必须有父母和孩子。下一次试用:
- 在
ViewController上成功登录会触发导航控制器的模态搜索/推送搜索(它本身会导致UserTableViewController) - 为了返回登录屏幕,我实现了一个委托而不是另一个 segue,在点击“注销”时触发 - 这里我面临的问题是我无法在
preparingForSegue中设置UserTableViewController的委托在ViewController上正确。此时,segue.destinationViewController不能向下转换为UserTableViewController,而只能转换为NavigationController,这不允许我在目的地 (UserTableViewController) 设置委托。
第三次试验与第二种方法相同,但从ViewController
直接到UserTableViewController。这可能有效,但现在我的UserTableViewController 上没有任何导航栏...!
当然,我可以在第三种解决方案中进行手动修复,例如插入独立导航栏,但两种方法似乎都没有效率。因此,我非常非常感谢一些提示,突出显示我(完全)在一侧误解的内容,并在另一侧展示了一种很好的方法。非常感谢您的帮助!
编辑:
我可以尝试将导航控制器设置为初始视图控制器,然后让登录屏幕 ViewController 被 UserTableViewController 呈现/关闭 - 这是一种实用的方法,还是对于那些登录视图场景有广为人知的最佳实践?
只是视觉帮助:
【问题讨论】:
标签: swift uinavigationbar ios8 xcode6 downcast