UIPassValue页面传值 UI_08(下)

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

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

时间: 2024-09-13 03:31:12

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

asp如何用存储绑定下拉 主要是怎么用页面传值给存储参数

问题描述 asp如何用存储绑定下拉 主要是怎么用页面传值给存储参数 (本人是学.net,对asp不熟悉)我有个文本框 我输入文本框值后失去焦点就把值传给下拉存储查询数据,谁能弄个例子

【转】ASP.NET页面传值汇总

介绍: 在网页应用程序的开发中,页面之间的传值应该是最常见的问题了. 在这篇文章里,azamsharp 将为我们介绍一些ASP.NET页面传值的方式.本文所举的例子非常简单,仅仅包含了一个文本框和几个按钮,当按钮点击时文本框中的字符串将会以不同的方 式传递到另外的页面去. 1. Response.Redirect (或称 Query String 方式.URL方式) Response.Redirect("WebForm5.aspx"); 首先让我们看看 Response.Redirec

asp.net 页面传值的几个方法_实用技巧

在这篇文章里,azamsharp 将为我们介绍一些ASP.NET页面传值的方式.本文所举的例子非常简单,仅仅包含了一个文本框和几个按钮,当按钮点击时文本框中的字符串将会以不同的方式传递到另外的页面去. 1. Response.Redirect (或称 Query String 方式.URL方式) 复制代码 代码如下: Response.Redirect("WebForm5.aspx"); 首先让我们看看 Response.Redirect 方法,这应该是最简单的了,当我们点击Respo

不同jsp页面传值问题!急!!!!!!

问题描述 不同jsp页面传值问题!急!!!!!! 我现在有两个jsp页面,第一个页面中有个下拉框,我想要在第二个页面中当点击按钮时获取第一个页面的下拉框选中的值,应该怎么做. 解决方案 将第一个页面消息传到Session ,在第二个页面获取 解决方案二: 跳到后台存储处理下.再取 解决方案三: 下拉框用change事件触发,用AJAX将值放到后台的这个用户的session中,在另一个页面点击是获取session中的KEY获取你需要的值 解决方案四: js将选中的值传到后台服务器再通过后台服务器去

springmvc-关于java springMVC ModelMap 向页面传值的问题

问题描述 关于java springMVC ModelMap 向页面传值的问题 将model.addAttribute("page", page);写Action调用的且有事务控制的Service中好吗?顺便请教下原因. 解决方案 model.addAttribute("page", page);这是向页面传值,通常是写在action代码中的. Service也是被action调用的.Service中只负责处理相应的业务功能,最终都是为action服务的.

jsp页面传值,第一个页面中的内容不固定,如何在第二个页面中显示

问题描述 jsp页面传值,第一个页面中的内容不固定,如何在第二个页面中显示 要写个jsp页面之间传值的功能.第二个页面展示第一个页面中某一个记录的详情,但是详情内容不固定,有的详情是一条记录,有的详情是多条记录,不知道该怎么在第二个jsp页面上显示出来. 具体的功能:第一个页面上显示公司类型和每个类型下公司的总数量,当双击公司类型的时候就会跳转到第二个页面,显示该类型下的所有公司,每个公司的详细信息都要列出来,每个公司后面都跟着一个修改按钮,每个公司的部分信息都可以被修改 第一个页面已经做出来了

jsp页面传值问题!急!!!

问题描述 jsp页面传值问题!急!!! 我用的mvc框架,在controller的方法参数里有个String flag,我现在想要从jsp页面返回一个flag值给后台,不用post或get传参,还有什么别的办法吗 解决方案 http协议浏览器目前仅支持 post 和 get,我想你要问的是,不刷新页面传给后台一个值, 那么你可以百度下 ajax . 解决方案二: 不用post get, 我想知道的是你后台怎么接收数据呢 解决方案三: http协议浏览器目前仅支持 post 和 get! 解决方案

菜鸟好急,关于struts2 页面传值给action的问题。。

问题描述 这里是传值<ahref="useradd.jsp?personId=${p.id}">添加账号</a>在另外一个添加页面需要获得personId,并调用useraddaction.<%intid=Integer.parseInt(request.getParameter("personId"));%>其中id已经正确得到值.关键是下一步<s:formaction="useradd"><

JSP页面传值乱码过滤方法_JSP编程

本文实例讲述了JSP页面传值乱码过滤方法.分享给大家供大家参考,具体如下: 1.过滤器类: package com.token.t1; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.serv