如何在故事板中自定义后退按钮

2023-12-24

我创建了一个具有 3 个 ViewController 的应用程序,其名称为:(ViewController,ViewController2,ViewController3) 在 ViewController 中存在一个按钮,用于检查文档文件夹中的文件或下载它。例如,首先检查文件,如果文档文件夹中存在文件,请转到 ViewController3,否则转到 ViewController2 并下载它。

因此 ViewController 2 可供下载,并具有用于显示下载状态的 UILable 和 UIProgress。如果下载的此页面中不存在文件,请转到 ViewController 3。

所以 ViewController3 用于显示文件。 (这些页面通过推送连接在一起,就像我在底部的图片一样)

当我转到任何页面并单击后退按钮返回上一页时,对吗? 我什么时候点击第一页中的按钮,文件不存在,然后在第二页下载,然后完成下载,转到第 3 页。现在我想什么时候单击第 3 页中的后退按钮,转到第 1 页,没有第 2 页!!!!

我在故事板工作。


您可以通过拦截 ViewController3 中的后退按钮事件并使用 unwindSegues 来实现此目的。 查看 William Jockusch 对此的回复question https://stackoverflow.com/questions/1214965/setting-action-for-back-button-in-navigation-controller了解如何拦截后退按钮事件。

要在这种特殊情况下使用 unwind segues,您需要:

1)在你的ViewController1中创建一个方法,例如

- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
    NSLog(@"Rolled back");
}

2) 在故事板中缩小,然后按住 Ctrl 键并从 ViewController3 拖动到 ViewController3 场景中左侧包含的“退出”绿色框(以及红色框第一响应者和所有控制器视图的子视图)。将显示一个弹出窗口,询问您要将展开转场连接到哪个 IBAction,您应该能够选择unwindToThisViewController您刚刚创建的操作。这将创建一个展开转场。

3) 从场景框中选择这个 unwind segue 并给它一个 ID,例如“unwindToStart”

4)最后,在你的ViewController3类中,重写该方法viewWillDisappear如下:

-(void) viewWillDisappear:(BOOL)animated 
{
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound)
        [self performSegueWithIdentifier:@"unwindToStart" sender:self];
    [super viewWillDisappear:animated];
}

这将拦截后退按钮事件并展开到您的 ViewController1,您就可以开始了。

编辑:由于展开转场仅在 iOS 6 及更高版本上受支持,如果您在早期版本的 iOS 上需要此功能,我认为唯一的方法是从 ViewController3 的 viewDidLoad 中的 NavigationController 堆栈中手动删除 ViewController2。像下面的代码应该做的事情:

- (void)viewDidLoad
{   
    NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
    for(UIViewController* vc in self.navigationController.viewControllers)
    {
        if ([vc isKindOfClass:[ViewController2 class]]) {
            [viewControllers removeObject:vc];
            break;
        }
    }
    self.navigationController.viewControllers = [NSArray arrayWithArray:viewControllers];
    // Do any additional setup after loading the view.
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在故事板中自定义后退按钮 的相关文章

随机推荐

  • Symfony:服务...依赖于不存在的参数 kernel.secret

    我正在尝试设置一个新的 Symfony 项目 当我执行 php console php config dump reference 时 出现错误 提示 服务 uri signer 依赖于不存在的参数 kernel secret 您的意思是
  • 解析SQL查询并提取列名和表名

    我有一个这样的查询脚本 SELECT View1 OrderDate View1 Email SUM View1 TotalPayments FROM dbo View1 WHERE View1 OrderStatus Completed
  • 如何在Mono中嵌入flash?

    是否可以在单声道应用程序中嵌入闪存 最好类似于它可以作为 ActiveX 控件嵌入到 Net 中的方式 但是任何 Flash 命令可以以某种方式冒泡到 Mono 应用程序的方式都可以 我原以为可以使用网页浏览器查看flash 但是我无法确定
  • 显示下拉列表时微调器的状态是什么?

    我正在创建一个带有自定义视图的微调器 无论如何 我设法在微调器处于非活动状态以及按下时显示不同的可绘制对象 我希望在下拉列表显示时保持按下状态可绘制 这是 mi XML 文件
  • 虚拟析构函数和未定义的行为

    这个问题不同于 我何时 为何应该使用virtual析构函数 struct B virtual void foo B lt not virtual struct D B virtual void foo D B p new D delete
  • 绝对元素和

    我试图在 Hackerrank 上解决这个问题 https www hackerrank com challenges playing with numbers problem https www hackerrank com challe
  • 有什么办法可以持续运行服务吗?

    Stack Overflow 上很少有类似的问题 但没有一个解决方案适合我 问题在于只有少数设备 例如 OnePlus 和 MI 一旦用户从最近的应用程序中删除应用程序 该服务就会被终止 我读到这些 OEM 使用一些激进的策略来终止服务 我
  • 将 WordPress 网站移至新域后,jQuery 无法正常工作

    我刚刚将我的网站移至 hostgator 上的新域 但现在该网站的内容未显示 无法运行的网站是http alcaldarone com http alcaldarone com我开发和工作的网站是http atcjr alcaldarone
  • Laravel 中的 whereHas 查询

    大家好 filterArray explode filters data articles DB table products gt join product category function q q gt on product cate
  • CSS 列数和 Chrome 错误:如何避免溢出内容被裁剪

    When column count被使用 它似乎裁剪任何overflow内容 columns webkit column count 1 webkit column gap 10px webkit column fill auto moz
  • 在 C++ 中表示浮点无穷大的方法

    我想在我的程序中用 C 表达浮点无穷大 我遇到了两种方法来实现这一目标 使用INFINITY and std numeric limits
  • 如何从 XML 数据中获取特定元素?

    我有一些代码来检索 XML 数据 import cStringIO import pycurl from xml etree import ElementTree API KEY my api key ima the path to a i
  • 不需要的表单参数被附加到分页链接

    我有一个页面 用于通过使用提供的表单提交数据来搜索列表 表单参数通过ajax post请求 提交 在搜索表中创建一条新记录 然后通过以下方式显示列表 动态地 在提交表单的同一页面上 show对此记录的操作 结果有 kaminari 提供的分
  • 在 Java 中将一个文本文件的内容复制到另一个文本文件

    我正在尝试将包含 2 3 个整数 例如 1 2 3 的一个文本文件 1 txt 的内容复制到另一个文本文件 2 txt 但出现以下错误编译后 import java io class FileDemo public static void
  • 为什么这个带有 Expression 的模拟不匹配?

    我是模拟新手 我正在尝试做这个模拟示例 存储库 cs public class Repository IRepository public List
  • 简单的正则表达式——用空格替换下划线

    嘿 我正在编写我的第一个 Rails 应用程序 我正在尝试用空格替换传入 id 名称中的下划线 如下所示 before 测试字符串 after 测试字符串 我怎样才能做到这一点 抱歉 如果这是一个有点愚蠢的问题 我对正则表达式不太熟悉 st
  • 如何查看mysql客户端的字段注释?

    我想看到个别领域的评论 通常是我期望从 描述 参数中得到的东西 mysql gt describe metrics Field Type Null Key Default Extra id int 10 unsigned NO PRI NU
  • BinaryFormatter - 是否可以在没有程序集的情况下反序列化已知类?

    我目前正在尝试与一个程序进行互操作 该程序在首先使用 C 的 BinaryFormatter 格式化数据后通过网络发送数据 这是一个愚蠢的想法 我讨厌它 但我必须与它进行互操作 我知道该类型是什么样子 我知道它的确切布局 但由于各种原因 我
  • 如何向用户表明我的 IIS 网站正在进行维护?

    对于我的 IIS 网站 我想将所有请求重定向到一页 这样做的目的是我想对我所有的 Web 应用程序使用的数据库进行一些维护 使其离线 我在这个网站下运行了大约 50 个网络应用程序 因此我想避免访问每个应用程序来更改某些内容 我想我可以对
  • 如何在故事板中自定义后退按钮

    我创建了一个具有 3 个 ViewController 的应用程序 其名称为 ViewController ViewController2 ViewController3 在 ViewController 中存在一个按钮 用于检查文档文件夹