目前没有后退按钮的ViewController

时间:2011-12-05 15:40:11

标签: iphone ios xamarin.ios

我遇到了一个烦人的问题,它让我感到很沮丧:<

我有3个视图控制器,一个用于显示详细广告,还有一个工具栏。现在我想要的是,如果用户在第一个视图中按下工具栏上的facebook图标,则必须执行检查。如果检查结果为false,则需要转到显示登录屏幕的第二个视图。如果用户在此处登录,则必须转到第3个屏幕,该屏幕显示简单的输入+按钮以更新其状态。

当用户在第三个屏幕时,应该有一个“后退”按钮,但是这个按钮不应该将它们带回View2,但它应该将它们带回View1(广告细节屏幕)。

我想我想要显示第二个屏幕(如果检查变为假)而不推动它但保持NavigationBar + TabBar呈现。我添加了一些截图来澄清。

第一次观看 First view, detailed advertisement information

第二种观点 If the user clicked on the Facebook icon and the user is not known, this view will be presented. If the user IS known, view 3 will be presented 我希望在不使用PushViewController的情况下呈现此视图,但保留NavigationBar和TabBar。

第三视图 Third view, if you press Back View1 has to be shown

我希望这是足够的信息,希望有人可以帮助我。

提前致谢!

4 个答案:

答案 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];
}

它是:在需要时创建并推送视图控制器。