html仿微信app界面_苹果微信不跳转对话框

html仿微信app界面_苹果微信不跳转对话框在之前写聊天项目的时候遇到了这个问题,在微信中我们可以:从联系人界面跳到详情页面再发起聊天,在聊天界面返回时返回到消息列表界面,这个问题困扰了我很久。

在之前写聊天项目的时候遇到了这个问题,在微信中我们可以:从联系人界面跳到详情页面再发起聊天,在聊天界面返回时返回到消息列表界面
这个问题困扰了我很久,这和项目的结构有关,在最初我们的项目结构是如下图这样的:

html仿微信app界面_苹果微信不跳转对话框

这样我们的每一个VC都有自己的导航,经过各种实验,在这情况下,从tabbarController的一个VC跳出去,再跳回tabbarController的另一个VC显然是不行的(主要是右滑返回很难做到)
所有我就思考,在tabbarController上再加一个导航,平时用VC自己的导航做跳转,在通过联系人详情页跳到聊天界面时用tabbarController的导航做跳转,这样就可以做到微信中的跳转逻辑了,就像下图这样的结构:

html仿微信app界面_苹果微信不跳转对话框

通过这种方式有个缺点,我们需要管理2个导航,而且在使用外层的导航做跳转时,跳转动画也和原生的导航跳转动画不一样。这也是我项目中目前使用的方法,当时使用这种方法实现之后也没有多想,以至于后来遇到了很多坑,这里也不多说了
最近我才想到其实我们可以吧VC的导航去掉,全部使用tabbarController的导航做跳转,这样就会简单很多,而且会避免很多坑,就像下图这种结构:

html仿微信app界面_苹果微信不跳转对话框

这种结构的实现我没有用在实际项目中,主要是我原来的项目改起来很麻烦,我就懒得改了,我这里写了一个Demo测试了一下,效果很好,所以写这篇文章来记录一下,如果你还有更好的实现的方式,可以在下面留言,我在这里先谢谢了

  1. 首先创建一个UITabBarController的子类
    // 将TabBarController写成单例类,因为我们需要全局取到它,并设置它的选中VC
    static ViewController *shareInstance = nil;
    +(ViewController *)sharedInstance{
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
         if (shareInstance == nil) {
             shareInstance = [[ViewController alloc]init];
         }
     });
     return shareInstance;
    }
  2. 注意这时在TabBarController中的VC的导航的标题的设置方式发生了改变,我们需要通过下面的方法设置title
    // 设置标题
    -(void)viewWillAppear:(BOOL)animated{
     [super viewWillAppear:animated];
     // 这里取到TabBarController,再设置它的标题
     [ViewController sharedInstance].title = @"消息";
    }
  3. 跳转到聊天界面代码
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
     CCDetailViewController *DVC = [[CCDetailViewController alloc]init];
     [self.navigationController pushViewController:DVC animated:YES];
    }
  4. 在聊天界面中
    // 视图呈现完成时
    -(void)viewDidAppear:(BOOL)animated{
     [super viewDidAppear:animated];
     // 让TabBarController选中消息列表界面
     [[ViewController sharedInstance] setSelectedIndex:0];
     // 清除导航栈中的VC,并加入tabbarController和聊天界面,这样在右滑手势时也可直接回到消息列表界面
     [self.navigationController setViewControllers:@[[ViewController sharedInstance],self]];
    }
    // 返回按钮点击事件
    -(void)backClick:(UIButton *)btn{
     [self.navigationController popToRootViewControllerAnimated:YES];
    }

附上Demo的地址github.com/cdcyd/Commo…

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13096.html

(0)

相关推荐

  • Oracle RAC 各个版本ASM使用共享文件系统的需求[亲测有效]

    Oracle RAC 各个版本ASM使用共享文件系统的需求[亲测有效]ASM磁盘需求

    2023-04-04
    153
  • MongoDB基础入门

    MongoDB基础入门简介 • MongoDB是为快速开发互联网Web应用而设计的数据库系统。 • MongoDB的设计目标是极简、灵活、作为Web应用栈的一部分。 • MongoDB的数据模型是面向文档的,所谓文档是一种

    2023-02-18
    160
  • Python 3 字符串拼接——打造高效编程利器

    Python 3 字符串拼接——打造高效编程利器在Python编程中,字符串处理是一项非常重要的任务。字符串拼接,即将多个字符串连接成一个字符串,是字符串处理中最常用的操作之一。Python自带的字符串拼接方法非常灵活,而且功能强大。本文将深入讨论Python中的字符串拼接方法,为读者提供一些高效的编程技巧,帮助他们在日常的Python编程工作中更加得心应手。

    2024-05-22
    65
  • Python数据类型及其应用场景

    Python数据类型及其应用场景Python是一种高级编程语言,流行于众多领域,如Web开发、数据科学、人工智能等,而数据类型是Python语言中的基础。Python提供了多种数据类型,包括数值型、字符串型、列表、元组、字典、集合等,每一种类型都有其特定的应用场景。

    2024-02-22
    109
  • SQL Server 索引的含义和特点

    SQL Server 索引的含义和特点索引用于快速找出在某个列中某一特定值的行。不使索引,数据库必须从第一条记录开始读完整个表,直到找到相关行。如果表中查询的列有一个索引,数据库能快速到达一个位置去搜寻数据,而不必查看所有数据。 索引的含

    2023-03-16
    147
  • 解决Python中出现“unhashable type: dict”的错误

    解决Python中出现“unhashable type: dict”的错误在Python中,如果尝试把一个字典作为另一个字典的键或作为集合的元素,会遇到“unhashable type: dict”的错误。通俗点解释就是,字典是不可hash的,因为字典是可变类型而不是不可变类型,因此不能用作另一个字典的键或作为集合的元素。

    2023-12-09
    115
  • 思维进阶 排序作弊 order by 一样可以加条件「建议收藏」

    思维进阶 排序作弊 order by 一样可以加条件「建议收藏」select * from user_level order by id in(4,6,2) and id<>2 desc ,user_total desc

    2023-03-09
    132
  • springboot中使用poi导出excel

    springboot中使用poi导出excel环境IntelliJIDEA2018.2JDK1.8SpringBoot2.1.9.RELEASEPOI3.9Maven依赖插入数据Excel读取数据Excel插入带公式计算Excel读取带公式计算的

    2023-08-18
    125

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注