新手介绍简单一下iOS开发中几种界面传值
首先在处理iOS-UI中,也许在很多地方需要用到两种甚至多种不同界面之间的传值,相比这也是很多iOS入门成员头疼问题,同样作为新手的我在接触这类传值时候也一脸懵然,经过一段时间的研究,对于简单的传值有一定的了解,下面依次对属性传值,代理传值做一定的说明,希望对于部分有需要的朋友有帮助。
一、属性传值:
通过图片可以看出,属性传值的是当前界面往后面的界面传值。首先根据个人的需要创建两个不同的界面,在前面的
UITextField中输入需要的值然后点击跳转就可以进入下一届面,然后对应的值会显示在下界面的提示框中:这里用两个例子(firstViewController,secondViewController),在secondViewController的.h文件中声明属性:
@property(nonatomic,strong)NSString *textString;(属性传值第一步)
然后在.m文件中声明属性
@property(nonatomic,strong)UILabel *label;
接着:
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
//配置导航栏标题
self.navigationItem.title = @"属性";
[self uibuttongs];
//创建lable
[self customLable];
//属性传值第三步
//将属性中存储的值取出来赋值给_lable.text
_label.text= _textString;
}
- (void)dealloc{
self.textString = nil;
}
- (void)customLable{
//创建lable对象
_label = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 120, 40)];
_label.layer.cornerRadius = 7;
_label.backgroundColor = [UIColor cyanColor];
_label.textColor = [UIColor blackColor];
[self.view addSubview:_label];
}
- (void)uibuttongs{
UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(100, 160, 60, 30)];
button.backgroundColor =[UIColor lightGrayColor];
[button setTitle:@"上一页" forState:UIControlStateNormal];
[button addTarget:self action:@selector(acction_butong:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
- (void)acction_butong:(UIButton *)sender//这里是返回上界面
{
[self.navigationController popViewControllerAnimated:YES];
}
然后只需要在 firstViewController中的.m文件完成如下声明属性:
@property(nonatomic,strong)UITextField *textField;
然后:
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
//配置导航栏标题
self.tabBarItem.title = @"属性传值";
//创建导航栏右功能键
[self customRightItem];
//创建textField
[self customTextFied];
}
#pragma mark - 创建导航栏右侧按钮
- (void)customTextFied{
//创建控件
_textField = [[UITextField alloc]initWithFrame:CGRectMake(100, 100, 120, 40)];
_textField.borderStyle = UITextBorderStyleRoundedRect;
_textField.layer.borderWidth = 1;
[self.view addSubview:_textField];
}
#pragma mark - 创建导航栏右侧按钮
- (void)customRightItem{
UIBarButtonItem *rightItem =[[UIBarButtonItem alloc]initWithTitle:@"跳转" style:UIBarButtonItemStyleDone target:self action:@selector(handleRight:)];
self.navigationItem.rightBarButtonItem = rightItem;
}
#pragma mark - 导航栏右侧按钮关联方法
- (void)handleRight:(UIBarButtonItem *)sender{
//创建跳转页面视图
scendViewController *scender = [[scendViewController alloc]init];
//属性传值第二步
//在push之前将——textField的值取出来赋值给second.textString
scender.textString = _textField.text;
[self.navigationController pushViewController:scender animated:YES];
}
二、代理传值:
a.后一个页面(找代理) 制定协议
b.写delegate属性
c.在合适的时候, 让代理执行协议方法
d.前一个页面(成为代理) 建立关系
e.遵守协议
f.实现协议方法
g.通知代理执行协议方法
*/
1、2、
3、
这里依旧用(firstViewController,secondViewController)两个界面来做例子,具体的界面根据个人的需求来定义声明。
从图片不难看出代理传值时一种传值方式从后界面往前界面往前传值的过程,首先在secondViewController的.h文件中制定协议;
@protocol senderViewControllerDelegate <NSObject>
//代理传值第一步:制定协议
//根据要传的数据类型设计方法的参数
- (void)passValue:(NSString *)string;
@end
然后定义属性:
@property(nonatomic,assign)id<senderViewControllerDelegate>delegate;
//代理传值第二步,定义代理协议属性
然后在其.m文件中封装的属性:
@property(nonatomic,strong)UITextField *textField;
接着:
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(hengde:)];
_textField = [[UITextField alloc]initWithFrame:CGRectMake(50, 100, 220, 40)];
_textField.layer.borderWidth = 1;
[self.view addSubview:_textField];
}
- (void)hengde:(UIBarButtonItem *)sender{
//代理传值第六步:在pop之前代理对象执行协议中的方法
if ([_delegate respondsToSelector:@selector(passValue:)]) {
[_delegate passValue:_textField.text];
}
[self.navigationController popViewControllerAnimated:YES];
}
完成在 secondViewController的操作后,在firstViewController中.m文件的操作:
//代理传值第四步:代理对象所在的类遵循协议
@interface firstViewController ()<senderViewControllerDelegate>
@property(nonatomic,strong)UILabel *lable;//封装属性
@end
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.title = @"代理";
_lable = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 120, 40)];
_lable.layer.borderWidth = 1;
[self.view addSubview:_lable];
UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(130, 180, 100, 50)];
[button setTitle:@"下一页" forState:UIControlStateNormal];
[button addTarget:self action:@selector(hended:) forControlEvents:UIControlEventTouchUpInside];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[self.view addSubview:button];
}
- (void)hended:(UIBarButtonItem *)sender{
senderViewController *sendedfr = [[senderViewController alloc]init];
//代理传值第三步:指定代理对象
sendedfr.delegate = self;
[self.navigationController pushViewController:sendedfr animated:YES];
}
//代理传值第五步:实现协议方法
- (void)passValue:(NSString *)string{
_lable.text = string;
}
然后代理的简单传值方式大概即使这样!
附:别忘了在firstViewController或者secondVIewController中导入对应的文件.h文件!
新手介绍简单一下iOS开发中几种界面传值的更多相关文章
- iOS开发UI篇—iOS开发中三种简单的动画设置
iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...
- iOS开发 — (UINaVigationController)导航控制器,界面传值
UINavigationController 继承于 UIViewController , 以栈的方式管理所 控制的视图控制器 . 至少要有一个被管理的视图控制器 ,这个控制器我们称作导航控制器的根视 ...
- iOS开发中几种常见的存储方式
1.archive 归档 数据的保存 1: let result = NSKeyedArchiver.archiveRootObject(contacts, toFile: path as Strin ...
- iOS开发中的Html解析方法
iOS开发中的Html解析方法 本文作者为大家介绍了在iOS开发中的Html解析方法,并同时提供了Demo代码的下载链接,Demo 解析了某个网站(具体可在代码中查看)的html网页,提取了图片以及标 ...
- IOS开发中如何判断程序第一次启动(根据判断结果决定是否显示新手操作引导)
IOS开发中如何判断程序第一次启动 在软件下载安装完成后,第一次启动往往需要显示一个新手操作引导,来告诉用户怎么操作这个app,这就需要在程序一开始运行就判断程序是否第一次启动,如果是,则显示新手操作 ...
- ios开发中超简单抽屉效果(MMDrawerController)的实现
ios开发中,展示类应用通常要用到抽屉效果,由于项目需要,本人找到一个demo,缩减掉一些不常用的功能,整理出一个较短的实例. 首先需要给工程添加第三方类库 MMDrawerController: 这 ...
- 总结iOS开发中的断点续传那些事儿
前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...
- iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】
在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ...
- iOS开发中的4种数据持久化方式【一、属性列表与归档解档】
iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹.ios开发中, ...
随机推荐
- iOS 原生的 UIButton 点击事件是不允许带多参数的,唯一的一个参数就是默认UIButton本身 那么我们该怎么实现传递多个参数的点击事件呢?
UIButton *btn = // create the button objc_setAssociatedObject(btn, "firstObject", someObje ...
- 分页控件AspNetPager学习笔记
1.AspNetPager简介 AspNetPager是一款开源.简单易用.可定制化等等各种优点的Web分页控件. 2.使用方法 1)下载AspNetPager.dll文件(http://www.we ...
- Javascript中的bind()函数
今天看到公司大神的一段代码: function ReplaceProcessor() { this._dom = { btnReplace: $('#ro_btnReplace'), btnCompl ...
- Java原生API操作XML
使用Java操作XML的开源框架比较多,如著名的Dom4J.JDOM等,但个人认为不管你用那个框架都要对JDK原生的API有所了解才能更得心应手的应用.本篇就来简单了解下原生的XML API. JAV ...
- Web纯前端“旭日图”实现元素周期表
一.什么是旭日图 旭日图是在Excel 2016中新增的一种图表.有些类似饼图,饼图的优势是可以显示占比.但是饼图只能显示单级数据.旭日图用来表示多层级数据的占比.旭日图以一种分层方式显示,非常适合用 ...
- .NET MD5加密解密代码
MD5简介: 是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数).不管是MD2.MD4还是MD5,它们都需要获 ...
- js中call、apply、bind那些事
前言 回想起之前的一些面试,几乎每次都会问到一个js中关于call.apply.bind的问题,比如- 怎么利用call.apply来求一个数组中最大或者最小值 如何利用call.apply来做继承 ...
- 2017 Android 面试题 [ 基础与细节 ]
2017 Android 面试题 [ 基础与细节 ] 感谢@chuyao抛出的这些问题,平时业务代码写多了,很多基础的东西变得含糊不清了,这次裸辞出来找工作确实没有之前顺利,顺便求上海Android开 ...
- markown编辑器截图粘贴预览,并将图片传至七牛云
最近在做一个项目,需要实现类似QQ截图后,就是能够在富文本编辑器中粘贴截图并预览. 先看一下效果: 分析一下实现步骤: QQ截图后在编辑器中粘贴,肯定会有一个粘贴事件,即 paste 事件 在事件回调 ...
- 转载 感受K2.Net 2003工作流解决方案
接触SourceCode公司的工作流产品K2.NET 2003有一段时间了,想把一些心得分享出来,和各位共同探讨一下,抛砖引玉,希望能对相关人士以启发. K2.Net 2003是基于微软.Net Fr ...