我遇到了一个烦人的问题,它让我感到很沮丧:<
我有3个视图控制器,一个用于显示详细广告,还有一个工具栏。现在我想要的是,如果用户在第一个视图中按下工具栏上的facebook图标,则必须执行检查。如果检查结果为false,则需要转到显示登录屏幕的第二个视图。如果用户在此处登录,则必须转到第3个屏幕,该屏幕显示简单的输入+按钮以更新其状态。
当用户在第三个屏幕时,应该有一个“后退”按钮,但是这个按钮不应该将它们带回View2,但它应该将它们带回View1(广告细节屏幕)。
我想我想要显示第二个屏幕(如果检查变为假)而不推动它但保持NavigationBar + TabBar呈现。我添加了一些截图来澄清。
第一次观看
第二种观点 我希望在不使用PushViewController的情况下呈现此视图,但保留NavigationBar和TabBar。
第三视图
我希望这是足够的信息,希望有人可以帮助我。
提前致谢!
答案 0 :(得分:5)
这里最自然的事情是以模态方式呈现登录视图控制器。当用户成功登录时,第一个控制器可以将第三个视图控制器推送到导航堆栈。这样,后退按钮将直接返回到第一个视图控制器,用户将理解原因。
答案 1 :(得分:2)
所以如果我们有三个UIVIewControllers:
DetailViewController FacebookLoginViewController UpdateViewController
我们有两个可行的选择:
1)成功登录后...弹出当前的LoginViewController,然后按下UpdateViewController
PopViewController(detailViewController, false);
PushViewController(updateViewController, true);
2)提供登录模式并简单地呈现UpdateViewController
PushModalViewController(loginViewController, true);
//ascertain result of login
if(IsLoggedIn) {
PushViewController(updateViewController, true);
}
答案 2 :(得分:0)
在推送新控件之前,尝试弹出当前视图控制器(我猜没有动画)。如果导航堆栈中只有一个视图控制器,则不会显示后退按钮。
没有使用Monotouch,但我想是这样的:
this.NavigationController.PopViewControllerAnimated(false);
this.NavigationController.PushViewController(newViewController, true);
但是,正如Caleb所暗示的那样,可能更好地找出一种适合正常导航行为的方式,而不是乱砍它。
答案 3 :(得分:0)
考虑以下视图推送逻辑。
if (!login) {
LoginViewController *lvc = [[[LoginViewController alloc] init] autorelease];
[self.navigationController pushViewController:lvc];
}
else {
ThirdViewController *tvc = [[[ThirdViewController alloc] init] autorelease];
[self.navigationController pushViewController:tvc];
}
它是:在需要时创建并推送视图控制器。