新手介绍简单一下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开发中, ...
随机推荐
- find、findIndex、indexOf、lastIndex、includes 数组五种查询条件方法介绍
find() 方法返回数组中满足提供的测试函数的第一个元素的值. 语法: arr.find(callback[, thisArg]) findIndex()方法返回数组中满足提供的测试函数的第一个元素 ...
- 《你不知道的JavaScript》整理(六)——强制类型转换
JavaScript中通常分为两种类型转换,"隐式强制类型转换"(implicit coercion)和"显式强制类型转换"(explicit coercion ...
- Vue基本入门
介绍 1.Vue.js是什么? Vue.js(读音:/vju:/,类似于view)是一套构建用户界面的渐进式框架,与其他重量级框架不同的是,Vue采用的是自底向上增量开发的设计. Vue的核心库只关注 ...
- resin远程调试配置,connection refused问题解决
http://john521.iteye.com/blog/1879805 这篇博客中讲的很好. 我在配置的过程中遇到了几个问题,记录一下: 1. 调试服务器监听的端口号,百度的开发机都限制了端口在某 ...
- 用 Visual Studio Code 调试 Node.js
环境: Visual Studio Code Node.js 1. 关闭运行中的程序 2.打开入口文件,我这里的入口文件为 app.js 3.点击左侧菜单栏的 debug 按钮 4.点击运行按钮 5 ...
- 解锁redis锁的正确姿势
解锁redis锁的正确姿势 redis是php的好朋友,在php写业务过程中,有时候会使用到锁的概念,同时只能有一个人可以操作某个行为.这个时候我们就要用到锁.锁的方式有好几种,php不能在内存中用锁 ...
- 原生ajax 和jquery ajax 个人总结
AJAX:即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. 通过在后台 ...
- jqzoom插件
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...
- 使用arcpy.mapping模块批量出图
出图是项目里常见的任务,有的项目甚至会要上百张图片,所以批量出土工具很有必要.arcpy.mapping就是ArcGIS里的出图模块,能快速完成一个出图工具. arcpy.mapping模块里常用 ...
- JAVA-随机读写文件
File类通过使用 . 来获取当前路径,从而取得文件. File f = new File(".\\Res\\Temp.txt"); 或者直接使用空构造函数: File f = n ...