2、从前一个界面到后一个界面
注意:解题思路
 葵花宝典:属性传值
 第一步:在下一个界面视图控制器的.h文件中定义一个属性
 第二步:在push之前将数据存储到属性中
 第三步:取出属性中的值让控件显示
 从后一个界面往前一个界面传值
 辟邪剑谱:代理传值
代理传值示意图:





注意:从后一个页面往前不相邻的一个界面传值用单例
——————————————————————————————
AppDelegate.m
 //创建根视图控制器firstVC

FirstViewController
*firstVC =
[[FirstViewController
alloc]init];

//创建导航控制器

UINavigationController
*navigationController
= [[UINavigationController
alloc]initWithRootViewController:firstVC];

self.window.rootViewController
=
navigationController;

   
[firstVC release];

   
[navigationController release];
———————————————————————————————
FirstViewController.m
#warning 代理传值第四步
代理对象所在的类遵循协议
@interface
FirstViewController
()<</span>SecondViewControllerDelegate>

@end
@implementation
FirstViewController
-
(void)passValue:(NSString
*)string{

#warning
代理传值第五步  实现协议中的方法
   
((UILabel
*)[self.view
viewWithTag:202]).text
=
string;
}
-
(void)viewWillDisappear:(BOOL)animated{

((UILabel
*)[self.view
viewWithTag:202]).text
=
[SingleLeton__
shareSingleLeton].string;

}

- (void)viewDidLoad
{

   
[super
viewDidLoad];
   
self.view.backgroundColor
=
[UIColor
cyanColor];
   
//建立一个label

UILabel
*label =
[[UILabel
alloc]initWithFrame:CGRectMake(30,
84,
260,
40)];

label.tag
=
202;

label.backgroundColor
=
[UIColor
whiteColor];

label.text
=
@"你爱她吗?";

   
label.textColor
=
[UIColor
redColor];
   
#warning 单例传值第五步  
取出单例中属性中存储的数据,赋值给空间
   
label.text
=
[SingleLeton__
shareSingleLeton].string;
   
[self.view
addSubview:label];
   
[label release];
   
//建立一个textField

UITextField
*field =
[[UITextField
alloc]initWithFrame:CGRectMake(30,
164,
260,
40)];

//第三步加tag值

field.tag
=
200;

field.borderStyle
=
UITextBorderStyleRoundedRect;

field.placeholder
=
@"请输入内容";

field.textColor
=
[UIColor
redColor];

[self.view
addSubview:field];

   
[field release];

   //建立一个button
   
UIButton
*button =
[UIButton
buttonWithType:UIButtonTypeCustom];

button.frame
=
CGRectMake(30,
244,
260,
40);

[button setTitle:@"进入下一页"
forState:UIControlStateNormal];

button.tintColor
=
[UIColor
redColor];

button.backgroundColor
=
[UIColor
grayColor];

[button addTarget:self
action:@selector(handlePassValue
: ) forControlEvents:(UIControlEventTouchUpInside)];

[self.view
addSubview:button];

[self
configureCommonProerty];

self.navigationController.navigationBar.tintColor
=
[UIColor
redColor];

}
#pragma mark
公共方法
-
(void)configureCommonProerty{

//设置导航条背景图片

[self.navigationController.navigationBar
setBackgroundImage:[UIImage
imageNamed:@"1"]
forBarMetrics:UIBarMetricsDefault];

}



- (void)handlePassValue
: (UIButton
*)passValue{

//此时创建的是下一个界面对象

SecondViewController
*second =
[[SecondViewController
alloc]init];

#warning 代理传值第三步
为后一个界面指定代理对象,只能是前一个页面试图控制器对象

   
second.delegate
=
self;
#warning 属性传值第二步
push之前传入数据
   
second.testString 
= ((UITextField
*)[self.view
viewWithTag:200]).text;

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

[second release];

}

- (void)customNavigationItemAppearance{

//配置导航条显示的标题

self.navigationItem.title
=
@"第一页";

}
代理传值效果:





——————————————————————————
SecondViewController.h

#warning 代理传值第一步
定义协议
@protocol
SecondViewControllerDelegate
<</span>NSObject>

- (void)passValue
: (NSString
*)string;
@end

@interface
SecondViewController
: UIViewController

#warning
属性传值第一步 
定义属性且属性的类型要和要传入的数据类型要保持一致

@property(nonatomic,copy)NSString
*testString;
#warning 代理传值第二步
定义代理属性
@property(nonatomic,assign)id<</span>SecondViewControllerDelegate>delegate;
@end
属性传值效果:



———————————————————————————
SecondViewController.m
//建立一个label

UILabel
*label =
[[UILabel
alloc]initWithFrame:CGRectMake(30,
84,
260,
40)];

label.backgroundColor
=
[UIColor
whiteColor];

label.text
=
@"给我下一页的内容";

#warning 属性传值的第三步 
取出数据让控件显示
   
label.text
=
self.testString;

label.textColor
=
[UIColor
redColor];

[self.view
addSubview:label];

[label release];

//建立一个textField

UITextField
*field =
[[UITextField
alloc]initWithFrame:CGRectMake(30,
164,
260,
40)];

field.tag
=
203;

field.borderStyle
=
UITextBorderStyleRoundedRect;

field.placeholder
=
@"请输入第二页的内容";

field.textColor
=
[UIColor
redColor];

[self.view
addSubview:field];

[field release];

//建立一个button

UIButton
*button =
[UIButton
buttonWithType:UIButtonTypeCustom];

button.frame
=
CGRectMake(30,
244,
260,
40);

[button setTitle:@"进入下一页"
forState:UIControlStateNormal];

button.tintColor
=
[UIColor
redColor];

button.backgroundColor
=
[UIColor
grayColor];

[button addTarget:self
action:@selector(handlePassValue
:) forControlEvents:(UIControlEventTouchUpInside)];

[self.view
addSubview:button];

//建立一个button

UIButton
*button1 =
[UIButton
buttonWithType:UIButtonTypeCustom];

button1.frame
=
CGRectMake(30,
324,
260,
40);

[button1 setTitle:@"返回上一页"
forState:UIControlStateNormal];

button1.tintColor
=
[UIColor
redColor];

button1.backgroundColor
=
[UIColor
grayColor];

[button1 addTarget:self
action:@selector(handlePass
:) forControlEvents:(UIControlEventTouchUpInside)];

[self.view
addSubview:button1];

self.navigationItem.title
=
@"第二页";

}



- (void)handlePassValue
: (UIButton
*)passValue{

ThirdViewController
*third =
[[ThirdViewController
alloc]init];

//传值第三不创建时赋值

   
third.textString
=
((UITextField
*)[self.view
viewWithTag:203]).text;
   
[self.navigationController
pushViewController:third
animated:YES];

[third release];

}
-
(void)handlePass
: (UIButton
*)pass{  
#warning 代理传值第六步
让代理执行协议中的方法
   
NSString
*string =
((UITextField
*)[self.view
viewWithTag:
203]).text;
   
if
([self.delegate
respondsToSelector:@selector(passValue:)])
{
       
[self.delegate
passValue:string];

}
   
[self.navigationController
popViewControllerAnimated:YES];

}
——————————————————————————
ThirdViewController.h
@property(nonatomic,copy)NSString
*textString;
ThirdViewController.m
self.view.backgroundColor
=
[UIColor
greenColor];

//建立一个label

UILabel
*label =
[[UILabel
alloc]initWithFrame:CGRectMake(30,
84,
260,
40)];

label.backgroundColor
=
[UIColor
grayColor];

label.text
=
@"给我第一个页面的内容";

label.text
=
self.textString;

[self.view
addSubview:label];

[label release];

//建立一个textField

UITextField
*field =
[[UITextField
alloc]initWithFrame:CGRectMake(30,
164,
260,
40)];

field.borderStyle
=
UITextBorderStyleRoundedRect;

field.textColor
=
[UIColor
redColor];

field.placeholder
=
@"啦啦啦";

field.tag
=
204;

[self.view
addSubview:field];

[field release];

//建立一个button

UIButton
*button =
[UIButton
buttonWithType:UIButtonTypeCustom];

button.frame
=
CGRectMake(30,
244,
260,
40);

[button setTitle:@"返回"
forState:UIControlStateNormal];

button.tintColor
=
[UIColor
redColor];

button.backgroundColor
=
[UIColor
grayColor];

[button addTarget:self
action:@selector(handlePassValue
:) forControlEvents:(UIControlEventTouchUpInside)];

[self.view
addSubview:button];

self.navigationItem.title
=
@"第三页";

}

- (void)handlePassValue
: (UIButton
*)passValue{

#warning 单例传值第四步 
给单例对象的属性赋值
[SingleLeton__
shareSingleLeton].string 
=  ((UITextField
*)[self.view
viewWithTag:204]).text;

[self.navigationController
popToRootViewControllerAnimated:YES];

}
————————————————————————————
SingleLeton单例.h
#warning 单例传值第一步
,定义单例类,继承自NSObject

#import

@interface
SingleLeton__
: NSObject

#warning 单例传值第二步
定义单例类的创建的方法
//share stand
main   创建单例对象方法常用的开头

+ (SingleLeton__
*)shareSingleLeton;
#warning
单例传值第三步 
定义属性,存储传输的数据,属性的类型要和传输数据的类型保持一致
@property(nonatomic,copy)NSString
*string;
@end
单例传值效果:



————————————————————————————
SingleLeton单例.m
//定义一个有static
修饰的SingleLeton对象
//static
修饰的变量的生命周期和应用程序的生命周期一样长,只有程序退出后台的时候才被销毁
static
SingleLeton__
*single
= nil;

+ (SingleLeton__
*)shareSingleLeton{

//single等于nil还没被初始化,所以在if语句对其初始化

//实时同步单例对象的创建,保护其在多线程下的安全

@synchronized(self){

if
(single
==
nil)
{

       
single
=
[[SingleLeton__
alloc]init];

}

}

   
return
single;

}

- (void)dealloc{

self.string
=
nil;

[super
dealloc];

}
================================================
导航控制器——UI-第八天(上):http://blog.sina.com.cn/s/blog_814ecfa90102vvzu.html

欢迎学习本文,未经博主许可禁止转载!

UIPassValue页面传值&nbsp;UI_08(下)的更多相关文章

  1. ASP.NET MVC 5 Web编程5 -- 页面传值的方式

    本篇文章将讲述MVC的页面传值方式,具体包括:后端向前端传值(Controller向View传值):前端向后端传值(View向Controller传值):Action与Action之间的传值. 回顾 ...

  2. WebForm 页面传值

    一.使用Querystring Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象.如果你想传递一个安全性不是那么太重要或者是 ...

  3. net面试 ASP.NET页面传值的各种方法和分析 (copy)

    Web页面是无状态的, 服务器对每一次请求都认为来自不同用户,因此,变量的状态在连续对同一页面的多次请求之间或在页面跳转时不会被保留.在用ASP.NET 设计开发一个Web系统时, 遇到一个重要的问题 ...

  4. Spring 向页面传值以及接受页面传过来的参数的方式

    来源于:http://www.cnblogs.com/liuhongfeng/p/4802013.html 一.从页面接收参数 Spring MVC接收请求提交的参数值的几种方法: 使用HttpSer ...

  5. ASP.NET页面传值不使用QueryString

    ASP.NET页面传值不使用QueryString   Asp.net中的页面传值方法: 1         Url传值 特点:主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址 ...

  6. artdialog4.1.7 中父页面给子页面传值

    artdialog4.1.7中父页面给子页面传值时看了一些网友的解决方法: 在父页面声明全局变量 var returnValue=“ ”,子页面用art.dialog.opener.returnVal ...

  7. webform页面传值和删除修改

    一.webform跨页面传值1.内置对象地址栏数据拼接 QueryString 优点:简单好用:速度快:不消耗服务器内存. 缺点:只能传字符串:保密性差(调转页面后在地址栏显示):长度有限.响应请求对 ...

  8. c#ASP.NET中页面传值共有这么几种方式

    一.目前在ASP.NET中页面传值共有这么几种方式: 1.Response.Redirect("http://www.hao123.com",false); 目标页面和原页面可以在 ...

  9. webform 页面传值的方法总结

    ASP.NET页面之间传递值的几种方式   页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有Quer ...

随机推荐

  1. 浅析java内存管理机制

    内存管理是计算机编程中的一个重要问题,一般来说,内存管理主要包括内存分配和内存回收两个部分.不同的编程语言有不同的内存管理机制,本文在对比C++和Java语言内存管理机制的不同的基础上,浅析java中 ...

  2. Docker安装tomcat和部署项目

    随着微服务的流行,Docker越来越流行,正如它的理念"Build, Ship, and Run Any App, Anywhere"一样,Docker提供的容器隔离技术使得开发人 ...

  3. ERP中的序列管理

    1.序列管理 序列管理主要实现系统用到序列生成规则的配置.主要包含序列配置.序列生产两个功能点. 2.术语说明 序列号:指序列中按步长递进的数字. 序列值:指按规则组合了 "拥有者.序列类型 ...

  4. C++框架_之Qt的信号和槽的详解

    C++_之Qt的信号和槽的详解 1.概述 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal ...

  5. python 常用镜像

    pip镜像https://pypi.tuna.tsinghua.edu.cn/simplehttps://pypi.douban.io.com/simple pip install python-qt ...

  6. Docker常见仓库CentOS

    CentOS 基本信息 CentOS 是流行的 Linux 发行版,其软件包大多跟 RedHat 系列保持一致. 该仓库提供了 CentOS 从 5 ~ 7 各个版本的镜像. 使用方法 默认会启动一个 ...

  7. JavaScript 字符串(String)对象

    String 对象用于处理已有的字符块. JavaScript 字符串 一个字符串用于存储一系列字符就像 "John Doe". 一个字符串可以使用单引号或双引号: 实例 var ...

  8. iOS控制反转(IoC)与依赖注入(DI)的实现

    背景 最近接触了一段时间的SpringMVC,对其控制反转(IoC)和依赖注入(DI)印象深刻,此后便一直在思考如何使用OC语言较好的实现这两个功能.Java语言自带的注解特性为IoC和DI带来了极大 ...

  9. “ML学分计划”说明书

    计划的由来 我们是一群对机器学习感兴趣的小伙伴,对于神奇的机器学习经常有"一探究竟"的冲动,却因为孤身一人学习的寂寞.亦或繁忙考试工作之余的小小拖延症,而没有持续这份对知识的渴求和 ...

  10. Zookeeper的安装部署

    1.Zookeeper的安装部署 7.1 Zookeeper工作机制 7.1.1.Zookeeper集群角色 Zookeeper集群的角色:  Leader 和  follower (Observer ...