覆盖 UINavigationController 中的后退按钮

Posted

技术标签:

【中文标题】覆盖 UINavigationController 中的后退按钮【英文标题】:Override back button in UINavigationController 【发布时间】:2014-07-03 07:14:42 【问题描述】:

我是 ios 开发的新手,正在开发我的第一个应用程序。我的应用有 3 个主要视图,第一个是登录屏幕(允许用户登录 Web 服务),第二个是提交屏幕(允许用户向 Web 服务提交内容),最后一个是设置视图(其中允许用户退出应用程序)。

我将用户凭据存储在 Keychain 中作为一种良好做法,这样用户就可以保持登录状态,并且通常当他们打开应用程序时,他们可以直接进入提交内容页面。因此,提交视图本质上是我的主要视图。

要访问设置,我在提交视图上有一个小齿轮按钮,可以将用户带到设置页面。在设置页面上,我有一个注销按钮,可以从钥匙串中删除您的用户名和密码。

因此,如果您已退出应用程序,我希望后退按钮将您带到登录视图,否则它应该将您带回提交视图,但我似乎无法控制后退按钮的功能用户。

我知道 Apple 的指导方针说不要做这样的事情,但这似乎是一个显而易见的设计选择。如何覆盖导航栏上后退按钮的操作?

【问题讨论】:

【参考方案1】:

只需隐藏导航栏并放置您的自定义导航栏并写下您想要按钮的任何名称并使用[self.navigationController popViewControllerAnimated: YES]; 提供返回按钮操作或选择您想要的任何视图控制器..

您可以简单地创建 NavigationController 的子类和 override 方法 popViewControllerAnimated:

【讨论】:

【参考方案2】:

您可以轻松地将用户信息保存在用户默认而不是钥匙串中。 当用户登录时添加这个

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"UserAlreadyRegister"];

当用户注销时添加这个

[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"UserAlreadyRegister"];

在你的提交视图中确实出现了下面的代码

-(void)viewDidAppear:(BOOL)animated
    BOOL alreadyRegister = [[NSUserDefaults standardUserDefaults] boolForKey:@"UserAlreadyRegister"];
    if (alreadyRegister)
        [self.navigationController popViewControllerAnimated:YES];
    

【讨论】:

以上是关于覆盖 UINavigationController 中的后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController 覆盖从右到左的推送显示黑色背景

捕捉 UINavigationController 本机后退按钮操作

使用 UINavigationController 自动旋转

UINavigationBar 和 UINavigationController 的内容之间的差距

使用 UINavigationController 默认 UIToolbar 的自定义背景

如何制作宽度不是全屏的 UINavigationController?