UIPassValue页面传值 UI_08(下)

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

UIPassValue页面传值 <wbr>UI_08(下)


注意:从后一个页面往前不相邻的一个界面传值用单例
——————————————————————————————
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 = @"第一页";
}
代理传值效果:
UIPassValue页面传值 <wbr>UI_08(下)


——————————————————————————
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
属性传值效果:
UIPassValue页面传值 <wbr>UI_08(下)

———————————————————————————
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
单例传值效果:
UIPassValue页面传值 <wbr>UI_08(下)

————————————————————————————
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

欢迎学习本文,未经博主许可禁止转载!
目录
相关文章
|
2月前
|
JavaScript 前端开发
如何优雅的只在当前页面中覆盖ui库中组件的样式(vue的问题)
如何优雅的只在当前页面中覆盖ui库中组件的样式(vue的问题)
31 0
如何优雅的只在当前页面中覆盖ui库中组件的样式(vue的问题)
|
2月前
|
机器学习/深度学习 人工智能 前端开发
机器学习PAI常见问题之web ui 项目启动后页面打不开如何解决
PAI(平台为智能,Platform for Artificial Intelligence)是阿里云提供的一个全面的人工智能开发平台,旨在为开发者提供机器学习、深度学习等人工智能技术的模型训练、优化和部署服务。以下是PAI平台使用中的一些常见问题及其答案汇总,帮助用户解决在使用过程中遇到的问题。
|
2月前
|
JavaScript 前端开发
vue element-ui分页插件 始终保持在页面底部样式
vue element-ui分页插件 始终保持在页面底部样式
110 0
|
8月前
HTML+VUE+element-ui通过点击不同按钮展现不同页面
HTML+VUE+element-ui通过点击不同按钮展现不同页面
111 1
|
7天前
|
前端开发 JavaScript Java
SSMP整合案例第六步 在前端页面上利用axios和element-ui与后端交互实现增删改
SSMP整合案例第六步 在前端页面上利用axios和element-ui与后端交互实现增删改
12 1
|
3天前
|
机器学习/深度学习 移动开发 文字识别
视觉智能开放平台产品使用合集之h5页面使用人脸活体检测,是否需要自己开发UI
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
2月前
|
移动开发
【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
|
2月前
|
前端开发 JavaScript 程序员
一个成都七中的初中生,出于兴趣爱好实现的 Win12 UI 页面效果,佩服佩服
一个成都七中的初中生,出于兴趣爱好实现的 Win12 UI 页面效果,佩服佩服
|
9月前
|
小程序 JavaScript 开发者
uniapp小程序订单页面UI
uniapp小程序订单页面UI
360 0
|
2月前
|
前端开发
SAP UI5 应用如何使用 iframe 嵌入其他 HTML 页面试读版
SAP UI5 应用如何使用 iframe 嵌入其他 HTML 页面试读版