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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84468.shtml
英文地址,請注明出處:http://en.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…