当前位置: 首页 > news >正文

【iOS】UI学习——界面切换

界面切换

  • push和pop
  • present和dismiss
  • 示例程序

push和pop

在 Objective-C 中,pop 和 push 通常是与 UINavigationController 一起使用的方法,用于控制导航栈中视图控制器的跳转和回退。

  • push 和 pop 通常成对使用,用于实现导航栈的前进和后退功能。
  • 当用户进入新的视图控制器时,使用 push 方法将其加入导航栈;
  • 当用户需要返回上一个视图控制器时,使用 pop 方法从导航栈中移除当前视图控制器。

push的代码格式:

[self.navigationController pushViewController:two animated:YES];

pop的代码格式

//返回上一视图控制器
[self.navigationController popViewControllerAnimated:YES];
//返回根视图控制器
[self.navigationController popToRootViewControllerAnimated:YES];
//返回到指定的控制器
[self.navigationController popToViewController:one animated:YES];

present和dismiss

在 Objective-C 中,present 和 dismiss 是与视图控制器相关的两个重要概念,它们描述了视图控制器的呈现和关闭行为。present 用于以模态方式呈现一个新的视图控制器。dismiss 用于关闭当前模态呈现的视图控制器,返回到上一级视图控制器。

区别与联系:

  • present 和 dismiss 是相对的概念,present 用于呈现新的视图控制器,dismiss 用于关闭当前视图控制器。
  • 通常情况下,一个视图控制器被 present 之后,需要通过 dismiss 方法来关闭自己,返回到上一级视图控制器。

示例代码:

[self presentViewController:three animated:YES completion:nil];
[self dismissViewControllerAnimated:YES completion:nil];

示例程序

在这里插入图片描述
VCone.m:

#import "VCone.h"
#import "VCtwo.h"
@interface VCone ()@end@implementation VCone
@synthesize item = _item;
- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor redColor];_item = [[UIBarButtonItem alloc] initWithTitle:@"下一页" style:UIBarButtonItemStylePlain target:self action:@selector(pressRight)];self.navigationItem.rightBarButtonItem = _item;
}-(void) pressRight
{VCtwo* two = [[VCtwo alloc] init];[self.navigationController pushViewController:two animated:YES];}/*
#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {// Get the new view controller using [segue destinationViewController].// Pass the selected object to the new view controller.
}
*/@end

VCtwo.m:

#import "VCtwo.h"
#import "VCone.h"
#import "VCthree.h"
@interface VCtwo ()@end@implementation VCtwo
@synthesize btn = _btn;
@synthesize btn1 = _btn1;
- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor greenColor];_btn = [[UIBarButtonItem alloc] initWithTitle:@"上一页" style:UIBarButtonItemStylePlain target:self action:@selector(press)];self.navigationItem.leftBarButtonItem = _btn;_btn1 = [[UIBarButtonItem alloc] initWithTitle:@"下一页" style:UIBarButtonItemStylePlain target:self action:@selector(pressright)];self.navigationItem.rightBarButtonItem = _btn1;
}-(void) press
{[self.navigationController popViewControllerAnimated:YES];
}-(void) pressright
{VCthree* three = [[VCthree alloc] init];[self presentViewController:three animated:YES completion:nil];
}/*
#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {// Get the new view controller using [segue destinationViewController].// Pass the selected object to the new view controller.
}
*/@end

VCthree.m:

#import "VCthree.h"
#import "VCtwo.h"
@interface VCthree ()@end@implementation VCthree- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.self.view.backgroundColor = [UIColor yellowColor];
}-(void) touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{[self dismissViewControllerAnimated:YES completion:nil];
}/*
#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {// Get the new view controller using [segue destinationViewController].// Pass the selected object to the new view controller.
}
*/@end

效果图

在这里插入图片描述

http://www.lryc.cn/news/370511.html

相关文章:

  • 【悬架笔记三】1/4被动悬架垂向动力学仿真+频域特性分析
  • 【C++】——继承(详解)
  • openGauss学习笔记-299 openGauss AI特性-AI4DB数据库自治运维-DBMind的AI子功能-SQLdiag慢SQL发现
  • Git 分支管理规范化[Git Flow ]分支管理策略
  • 一键Mock工具(Http协议接口调试工具)
  • Golang的context
  • Android 各个版本名称和特性总结(持续更新)
  • 9.0 Android中的网络技术
  • linux查看端口是否被占用 / 包含某个字符的文件/当前正在运行的进程/根据端口号查找进程
  • 解锁 JavaScript ES6:函数与对象的高级扩展功能
  • 算法金 | 10 大必知的自动化机器学习库(Python)
  • 微信小游戏开发难度大吗?开发流程有哪些?
  • Qt程序打包成单个exe文件
  • 【机器学习】GANs网络在图像和视频技术中的应用前景
  • MFC 使用sapi文字转换为语音
  • (Git)多人协作1
  • MySQL-分组函数
  • 【C语言】联合(共用体)
  • 【博客715】如何从victorimametrics集群中下线vmstorage节点
  • Redis缓存技术详解与实战
  • 业务架构的位置及关系
  • CMS与AI的融合:构建万能表单小程序系统
  • 机器学习常见知识点 2:决策树
  • 海洋CMS admin_notify.php 远程代码执行漏洞复现(CVE-2024-30565)
  • Spring、Spring MVC、MyBatis和Spring Boot对比
  • 【Linux高级IO】select、poll、epoll
  • Etcd Raft架构设计和源码剖析2:数据流
  • 深入理解Qt多线程编程(QThreadPool)
  • Prisma数据库ORM框架学习
  • Flutter-使用MethodChannel 实现与iOS交互