【发布时间】:2014-05-07 17:33:46
【问题描述】:
我有一个应用程序,用户必须在初始屏幕上输入一些信息,例如登录凭据。所有的导航都是使用故事板和 segues 完成的,它会自动将导航栏设置在顶部。
我有两个故事板共享相同的控制器,所以我对 segue 使用相同的名称(ipad 和 iphone 版本)。
所以当用户回到应用程序时,我读取了核心数据并知道他已经执行了初始步骤,所以我想“跳过”那些屏幕。
问题: 我只能在视图可见后执行 segues,否则导航会搞砸。但是这样做时,用户会短暂地看到屏幕并看到动画“推”开该屏幕。我想在导航栏上保留导航历史,这就是为什么我想使用 segues 以及与之相关的所有逻辑。
所有解决方案都指向以编程方式创建视图并将它们放入堆栈,但我想利用情节提要。
【问题讨论】:
-
尝试使用 performSegueWithIdentifier 根据身份验证状态指定要“链接”到的 segue。至于搞砸的导航,我不确定如果您正确设置了故事板,我会理解为什么会这样
-
我们已经在做 performSegueWithIdentifier,问题是它只能在 viewDidAppear 事件上执行,而不像 viewDidLoad 一样早。这意味着用户已经在查看屏幕并且会注意到转换。如果您尝试在 viewDidLoad 上执行此操作,则导航会出错(如果您检查控制台,则会出现一些警告)。
-
我不确定我是否理解为什么只能在视图中执行 segue 确实出现了。假设您有一个登录控制器,您执行登录,然后执行所需的转场。这将作为身份验证的一部分发生,而不是视图加载。我想我对你写的“所以当用户回到应用程序”的行感到困惑,你能解释更多或显示代码吗?
-
好的,让我试着简化一下这个问题。我有两个屏幕,当用户按下按钮时,他会从第一个屏幕导航到第二个屏幕。执行 performSegueWithIdentifier,第二个屏幕出现从右侧滑入(推)。在某些情况下,我想跳过第一个屏幕并直接进入第二个屏幕,但如果用户愿意,他可以按返回按钮并返回第一个屏幕。所以我正在做的是 viewDidAppear 上的 performSegueWithIdentifier。这会导致导航发生,但屏幕转换是可见的。
-
如果我尝试在 viewDidLoad 上执行此操作,这将是完美的时机,它仍然可以导航,但第二个屏幕上的“后退”按钮无法正常工作,因为我之前已经导航过。
标签: ios objective-c ios7 segue