`
stephen830
  • 浏览: 2966712 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

iOSm界面跳转和参数传递之presentViewController与dismissViewControllerAnimated

 
阅读更多

iOSm界面跳转和参数传递之presentViewController与dismissViewControllerAnimated

 

presentViewController与dismissViewControllerAnimated是针对普通的界面框架(不用UINavigationController)。

 

从A界面打开B界面

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completioncompletion:(void (^)(void))completion 在B界面的viewDidAppear()调用后执行

 

关闭当前界面(B界面),返回之前的界面(A界面)

- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completioncompletion:(void (^)(void))completion 在A界面的viewDidAppear()调用后执行

 

假设

界面1为 ViewController01 : UIViewController 界面2为 ViewController02 : UIViewController

 

其中界面1为项目的rootViewController.

 

AppDelegate.h代码

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) NSString* localImagePath;

@end

 

AppDelegate.m的部分代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    
    
    ViewController01* mViewController01 = [[ViewController01 alloc]init];
    self.window.rootViewController = mViewController01;
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

 

ViewController01.h代码

#import <UIKit/UIKit.h>

@interface ViewController01 : UIViewController

@property (strong,nonatomic) NSMutableDictionary* parameter;

@end

 

ViewController01.m代码

#import "ViewController01.h"
#import "MyViewTool.h"
#import "ViewController02.h"


@interface ViewController01 ()

@end

@implementation ViewController01

- (void)viewDidLoad {
    NSLog(@"viewDidLoad():视图1");
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self initViews];
    [self initParameter];
}

-(void)viewDidAppear:(BOOL)animated{
    NSLog(@"viewDidAppear():视图1");
    [super viewDidAppear:animated];
    //接收到的参数
    NSLog(@"viewDidAppear():视图1,收到的参数:from=%@",[self.parameter objectForKey:@"from"]);
}

- (void)initViews{
    
    CGSize size = [MyViewTool loadScreenSize];
    CGFloat width = size.width;
    
    UILabel* label = [MyViewTool createLabel:CGRectMake(10, 40, width-20, 100) withText:@"视图1" withBgcolor:[UIColor yellowColor]];
    
    UIButton* btn = [MyViewTool createButton:CGRectMake(label.frame.origin.x, label.frame.origin.y+label.frame.size.height+20, 200, 50) withDelegate:self withAction:@selector(buttonClick:) withTitle:@"按钮1:点击打开视图2"
                                 withBgColor:[UIColor lightGrayColor]];
    
    
    btn.center = CGPointMake(width/2, btn.center.y);
    
    [self.view addSubview:label];
    [self.view addSubview:btn];
}

#pragma mark 初始化要传递的参数
- (void)initParameter{
    self.parameter = [[NSMutableDictionary alloc]init];
}


-(void)buttonClick : (UIButton*) sender {
    NSLog(@"buttonClick:%@",sender.titleLabel.text);
    
    //设置传递参数的数据
    [self.parameter setObject:@"我是视图1设置的参数" forKey:@"from"];
    
    //打开 ViewController02
    ViewController02* mViewController02 = [[ViewController02 alloc]init];
    mViewController02.parameter=self.parameter;
    
    [self presentViewController:mViewController02 animated:YES completion:^{
        NSLog(@"presentViewController成功");
    }];
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

 

ViewController02.h代码

#import <UIKit/UIKit.h>

@interface ViewController02 : UIViewController

@property (strong,nonatomic) NSMutableDictionary* parameter;

@end

 

ViewController02.m代码

#import "ViewController02.h"
#import "MyViewTool.h"

@interface ViewController02 ()

@end

@implementation ViewController02


- (void)viewDidLoad {
    NSLog(@"viewDidLoad():视图2");
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self initViews];
}

-(void)viewDidAppear:(BOOL)animated{
    NSLog(@"viewDidAppear():视图2");
    [super viewDidAppear:animated];
    //接收到的参数
    NSLog(@"viewDidAppear():视图2,收到的参数:from=%@",[self.parameter objectForKey:@"from"]);
}

- (void)initViews{
    
    CGSize size = [MyViewTool loadScreenSize];
    CGFloat width = size.width;
    
    UILabel* label = [MyViewTool createLabel:CGRectMake(10, 40, width-20, 100) withText:@"视图2" withBgcolor:[UIColor yellowColor]];
    
    UIButton* btn = [MyViewTool createButton:CGRectMake(label.frame.origin.x, label.frame.origin.y+label.frame.size.height+20, 200, 50) withDelegate:self withAction:@selector(buttonClick:) withTitle:@"按钮2:点击返回视图1" withBgColor:[UIColor lightGrayColor]];
    
    
    btn.center = CGPointMake(width/2, btn.center.y);
    
    [self.view addSubview:label];
    [self.view addSubview:btn];
}

-(void)buttonClick : (UIButton*) sender {
    NSLog(@"buttonClick:%@",sender.titleLabel.text);
    //设置返回给视图1的参数
    [self.parameter setObject:@"我是视图2设置的参数" forKey:@"from"];
    [self dismissViewControllerAnimated:YES completion:^{
        NSLog(@"dismissViewControllerAnimated成功");
    }];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

 

 项目源代码参见附近中的demo010.zip

 

 

 

 

 

 

 

 

 

 

分享到:
评论
1 楼 cz4621698 2015-09-16  

相关推荐

    pl2303完整驱动,包括windows、mac、linux下全方面驱动

    linux下驱动源码,以及测试工具 windows下驱动以及测试工具 mac测试工具

    SSH框架开发的物业管理系统.zip

    本系统主要围绕管理人员、业主、维修人员、维修部门管理层人员对物业管理中的维修管理的各方面应用进行开发,界面采用JSP开发。 MySQL作为后台数据库。 Tomcat7.0作为服务器。 运行环境:jdk7+tomcat7+mysql+...

    Wallpaper Images-crx插件

    Tokiosišsamios,vienoje vietoje sutelktosvaizdinėsmedžiagos,iliustruojančiosmūsųgimtinę,negalipasiūlytinvi vienalietuviškaelektroninėerdvė。 Parodykimemūsųdraugamsužsieniečiams,...

    python学习导航.txt

    python

    node-v8.3.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    嵌入式微处理器设计及应用

    摘要:为满足智能家居座椅的交互式运动控制需求,基于AT89S52设计了嵌入式座椅运动控制系统。使用VB.net设计了游戏手柄按键读取软件,并在此基础上设计了座椅运动控制软件,软件可分别在“手柄模式”和“鼠标模式”下与嵌入式座椅运动控制器通信,进而控制座椅进行加速、减速、正转和反转等运动;构建了控制系统实验装置,实验结果表明,“鼠标模式”下,通过鼠标点击控制软件上功能按钮可实现对座椅的准确运动控制;“手柄模式”下,游戏手柄不仅可控制座椅运动,还可同步控制电脑上运行的游戏或远程遥控车,实现浸入感较强的座椅运动娱乐应用。

    2024年中国NFC RFID阅读器行业研究报告.docx

    2024年中国NFC RFID阅读器行业研究报告

    node-v9.9.0-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    04-18 周四 为LLM-inference项目配置GitHub CI过程记录

    04-18 周四 为LLM-inference项目配置GitHub CI过程记录

    2024年中国AI和机器视觉行业研究报告.docx

    2024年中国AI和机器视觉行业研究报告

    计算机二级【公共基础知识速学教程】.pdf

    内容概要:这份资料包含了计算机二级公共基础知识速学教程的内容大纲,涵盖了数据结构与算法、程序设计基础、软件工程基础、数据库设计基础等多个章节。其中包括了算法复杂度、数据结构、栈、队列、链表、二叉树、查找、排序等内容,以及程序设计方法、软件工程概念、数据库设计原理等知识点。 适用人群:适合希望系统学习计算机二级公共基础知识的学生、计算机专业学习者、程序员、软件工程师以及对数据结构、算法和数据库设计感兴趣的人群,希望通过系统学习提升自己的计算机基础知识和技能。 使用场景及目标:该教程可用于计算机相关专业的课程学习、自学提升或备考计算机二级公共基础考试。学习者可以通过逐章学习和实践,掌握数据结构与算法、程序设计基础、软件工程基础和数据库设计基础等知识,提高自己在计算机领域的理论基础和实践能力。 其他说明:学习者在使用这份教程时,可以结合实际案例和练习题进行深入学习和巩固。建议按照章节顺序系统学习,理解各个知识点的概念和应用,并通过实践项目或练习加深对计算机基础知识的理解和掌握。通过系统学习,可以提升自己在计算机领域的专业水平和能力。

    减肥管理,全球前10强生产商排名及市场份额.docx

    减肥管理,全球前10强生产商排名及市场份额

    04-19 周五 GitHub actions-runner 程序解释

    04-19 周五 GitHub actions-runner 程序解释

    node-v8.16.1-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于Gnuradio与Hackrf的无线通信收发系统的实现.pdf

    基于Gnuradio与Hackrf的无线通信收发系统的实现.pdf

    5g与数字孪生赋能数字化矿山总体解决方案.pptx

    5g与数字孪生赋能数字化矿山总体解决方案.pptx

    ISO IEC TS 27022-2021 信息技术信息安全管理系统过程指南.pdf

    ISO IEC TS 27022-2021 信息技术信息安全管理系统过程指南.pdf

    一篇关于图像和视频去噪技术的研究论文,它介绍了一种基于稀疏3D变换域的协同滤波方法

    "Image and video denoising by sparse 3D transform-domain collaborative filtering" 是一篇关于图像和视频去噪技术的研究论文,它介绍了一种基于稀疏3D变换域的协同滤波方法。这种方法的核心思想是利用图像或视频中的空间和时间冗余信息来去除噪声

    IEC 60364-7-712-2017 低压电气装置.第7-712部分:特殊装置或位置的要求.太阳能光伏PV电源系统

    IEC 60364-7-712-2017 低压电气装置.第7-712部分:特殊装置或位置的要求.太阳能光伏(PV)电源系统.pdf

Global site tag (gtag.js) - Google Analytics