push [特殊字符] present

push 🆚 present

  • 前言
  • present和dismiss
    • 特点
    • 代码演示
  • push和pop
    • 特点
    • 代码演示

前言

在 iOS 开发中,pushpresent 是两种不同的视图控制器切换方式,它们有着显著的区别。

present和dismiss

特点

  • 在当前控制器上方新建视图层级
  • 需要手动调用dismiss
ViewController* vc = [[ViewController alloc] init];
[self presentViewController:vc2 animated:YES completion:nil];

对应的dismiss方法:(用于关闭或取消当前显示的视图、对话框等)

[self dismissViewControllerAnimated:YES completion:nil];
  • 默认从下向上滑入
  • 只保留当前presented的控制器
  • 可配置为全屏覆盖

代码演示

新建View02类作为视图控制器二

dimiss方法在View02文件中实现

#import "View02.h"@interface View02 ()@end@implementation View02- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor cyanColor];
}-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {[self dismissViewControllerAnimated:YES completion:nil];
}

作为视图控制器一

present方法在ViewController文件中实现

#import "ViewController.h"
#import "View02.h"
@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];[self creatUIRectButton];
}
- (void)creatUIRectButton {UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];btn1.frame = CGRectMake(10, 400, 120, 80);[btn1 setTitle:@"test button" forState:UIControlStateNormal];[btn1 setTitle:@"按下时候" forState:UIControlStateHighlighted];[btn1 addTarget:self action:@selector(press) forControlEvents:UIControlEventTouchUpInside];[btn1 setTintColor:[UIColor whiteColor]];btn1.backgroundColor = [UIColor grayColor];[self.view addSubview: btn1];
}
- (void) press {View02* vc = [[View02 alloc] init];[self presentViewController:vc animated:YES completion: nil];
}@end

运行效果:

在这里插入图片描述

push和pop

特点

  • 用于导航控制器堆栈中的视图控制器的界面切换。压入导航栈,成为栈顶控制器
ViewController* vc = [[ViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];

对应的消失视图方法为:

[self.navigationController popViewControllerAnimated:YES];
  • 系统自动生成返回按钮
  • 新视图从右向左滑入
  • 保留所有pushed的控制器
  • 不能全屏覆盖

代码演示

创建一个导航控制器:

//SceneDelegate.m
#import "SceneDelegate.h"
#import "VCRoot.h"
@interface SceneDelegate ()@end@implementation SceneDelegate- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {self.window.frame = [UIScreen mainScreen].bounds;UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:[[VCRoot alloc] init]];self.window.rootViewController = nav;[self.window makeKeyAndVisible];
}

第一个视图控制器:

#import "VCRoot.h"
#import "VCSecond.h"
@interface VCRoot ()@end@implementation VCRoot- (void)viewDidLoad {[super viewDidLoad];self.navigationController.navigationBar.translucent = YES;self.title = @"title";self.navigationItem.title = @"根视图";self.view.backgroundColor = [UIColor blueColor];self.navigationController.navigationBar.barStyle = UIBarStyleDefault;UIBarButtonItem *next = [[UIBarButtonItem alloc] initWithTitle:@"下一级" style:UIBarButtonItemStylePlain target:self action:@selector(pressRight)];self.navigationItem.rightBarButtonItem = next;
}
-(void)pressRight {VCSecond *vc2 = [[VCSecond alloc] init];[self.navigationController pushViewController:vc2 animated:YES];
}

第二个视图控制器:

#import "VCSecond.h"
#import "VCthird.h"
@interface VCSecond ()@end@implementation VCSecond- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor yellowColor];UIBarButtonItem *btnNext = [[UIBarButtonItem alloc] initWithTitle:@"next" style:UIBarButtonItemStylePlain target:self action:@selector(press)];self.navigationItem.rightBarButtonItem = btnNext;
}
-(void)press {VCthird *vc3 = [[VCthird alloc] init];[self.navigationController pushViewController:vc3 animated:YES];
}

第三个视图控制器:

#import "VCthird.h"@interface VCthird ()@end@implementation VCthird- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor cyanColor];UIBarButtonItem *btnLeft = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(pressBack)];self.navigationItem.rightBarButtonItem = btnLeft;
}
-(void)pressBack {[self.navigationController popToRootViewControllerAnimated:YES];
}

运行效果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java项目中常用的中间件及其高频问题避坑

Java项目中常用的中间件及其高频问题避坑如下: 一、常用中间件分类及作用 1. ​​消息队列中间件​​ ​​作用​​:解耦系统、异步通信、削峰填谷。​​代表产品​​: ​​Kafka​​:高吞吐量流处理,适合日志收集、实时分析。​​RocketMQ​​:金融级可靠性,支持事务消…

发布一个angular的npm包(包含多个模块)

为什么要发布npm包 根本原因时为了能够在更广泛的区域复用代码&#xff0c;比如公司不支持一般的外部网络&#xff0c;但是支持npm包的下载&#xff0c;那么就可以发布npm包&#xff0c;然后在公司内使用。 angular的npm不同吗 angular library angular 目前已经到angular20…

Web后端基础:Maven基础

课程内容&#xff1a; 初始MavenMaven概述 Maven模型Maven仓库介绍Maven安装与配置 IDEA集成Maven依赖管理单元测试 1.初始Maven 1.1介绍 Maven 是一款用于管理和构建Java项目的工具&#xff0c;是Apache旗下的一个开源项目 。 Apache 软件基金会&#xff0c;成立于1999年7月…

http协议同时传输文本和数据的新理解

首先&#xff0c;承认本人对于http协议认知确实不够&#xff0c;从来没有仔细研究这一块。 其次&#xff0c;这回确实要把自己十几年的理解更新一下了&#xff0c;主要还是自己过去没有认真研究过http协议。 这一次是这么回事&#xff0c;碰到一个情况&#xff0c;要在一次消…

《安富莱嵌入式周报》第354期: 开源36通道16bit同步数据采集卡,开源PoE以太网GPIB,分体式键盘DIY,微软WSL开源,USB转车载以太网

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; https://www.bilibili.com/video/BV1kJThzxETY/ 《安富莱嵌入式周报》第354期: 开源36通道16bit同…

Hyperlane 框架详解与使用指南

hyperlane 是一个高性能且轻量级的 Rust HTTP 框架&#xff0c;设计目标是简化现代 Web 服务的开发&#xff0c;同时兼顾灵活性和性能表现。本文将详细介绍 hyperlane 框架的核心功能、API 设计、生命周期模型、路由支持及性能测试结果&#xff0c;帮助开发者快速掌握和应用该框…

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…

一个小小的 flask app, 几个小工具,拼凑一下

1. 起因&#xff0c; 目的: 自己的工具&#xff0c;为自己服务。给大家做参考。项目地址&#xff1a; https://github.com/buxuele/flask_utils 2. 先看效果 3. 过程: 一个有趣的 Flask 工具集&#xff1a;从无到有的开发历程 缘起&#xff1a;为什么要做这个项目&#xff…

织梦dedecms怎样用标签调用随机数?

​在使用织梦模板建站中&#xff0c;随机数作为一个偶尔使用到的参数&#xff0c;在具体使用中虽然用的少&#xff0c;但是今天跟版网小编给大家介绍下&#xff0c;大家可以参考下&#xff1a; 实现随机数的调用可以使用下面的js&#xff1a; 方法一&#xff1a;js代码 Math…

访问服务器项目,服务器可以ping通,但是端口访问不到

原因&#xff1a;端口未开放 假设项目部署服务器为205&#xff0c;在90服务器访问205项目 1、首先在205确定项目启动&#xff0c;看端口是否占用 # Windows&#xff08;检查端口占用&#xff09; netstat -ano | findstr "8103"期望输出&#xff1a; TCP 0.0.…

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…

华为云Flexus+DeepSeek征文 | 基于ModelArts Studio、DeepSeek大模型和Dify搭建网站智能客服助手

目录 一、前言 二、ModelArts Studio&#xff08;MaaS&#xff09;介绍与应用场景 2.1ModelArts Studio&#xff08;MaaS&#xff09;介绍 2.2 ModelArts Studio&#xff08;MaaS&#xff09;使用场景 2.3 开通MaaS服务 2.4 开通DeepSeek-V3商用服务 三、华为云Flexus简介 3.1 …

『uniapp』url拦截屏蔽 避免webview中打开淘宝店铺自动跳转淘宝

目录 分析1. wv.overrideUrlLoading2. 参数 `mode: allow`3. 参数 `match: ^(http|https)://.*`4. 回调函数 `function(e) { console.warn(allow url:, e.url); }`作用:可能的应用场景:核心代码总结欢迎关注 『uniapp』 专栏,持续更新中 欢迎关注 『uniapp』 专栏,持续更新…

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…

Zookeeper 和 Kafka 版本与 JDK 要求

Apache Zookeeper 和 Apache Kafka 在不同版本中对 JDK 的要求如下表所示(基于官方文档和历史版本记录整理): 1. Zookeeper 版本与 JDK 要求 Zookeeper 版本要求的最低 JDK 版本说明3.4.x 系列JDK 6生产环境建议用 JDK 8(旧版兼容性强)。3.5.x 系列(3.5.5+)JDK 83.5.0 …

V837s-SDK Telnetd服务连接不上异常解决

目录 前言 一、检查 Telnetd 服务是否启动 二、问题解决 总结 前言 在基于 V837s-SDK 进行开发的过程中,Telnetd 服务连接不上是一个较为常见且棘手的问题。Telnet 作为一种远程登录协议,在开发调试时为我们提供了便捷的远程操作方式。若其连接出现异常,将严重影响开发进度…

滑动窗口最大值和最小值

题目&#xff1a; 思路&#xff1a; 窗口进行滑动时&#xff0c;需要快速获取min和max&#xff0c;因此需要一个结构来保存最值&#xff0c;而不是临时计算。动态的最值更新容易联想到单调栈&#xff0c;但是这里需要频繁增删元素&#xff0c;因此用双端队列&#xff0c;front…

JVM——对象创建全家桶:JVM中对象创建的模式及最佳实践

引入 在 Java 应用开发中&#xff0c;对象创建是最基础且高频的操作&#xff0c;但往往也是性能优化的关键切入点。想象一个在线阅读平台&#xff0c;每天需要创建数百万个 Book 对象来统计阅读数据。如果每个对象的创建过程存在内存浪费或性能瓶颈&#xff0c;累积效应将导致…

VSCode中PHP使用Xdebug

本地环境 windows10php8.2 ntsxdebug v3thinkphp v8 下载Xdebug Xdebug下载地址 从xdebug下载地址,下载最新的xdebug,解压后将php_xdebug.dll放入php目录的ext目录下 配置php.ini [Xdebug] zend_extension php_xdebug xdebug.client_host 127.0.0.1 xdebug.client_port…