首先在处理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开发中几种界面传值的更多相关文章

  1. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  2. iOS开发 — (UINaVigationController)导航控制器,界面传值

    UINavigationController 继承于 UIViewController , 以栈的方式管理所 控制的视图控制器 . 至少要有一个被管理的视图控制器 ,这个控制器我们称作导航控制器的根视 ...

  3. iOS开发中几种常见的存储方式

    1.archive 归档 数据的保存 1: let result = NSKeyedArchiver.archiveRootObject(contacts, toFile: path as Strin ...

  4. iOS开发中的Html解析方法

    iOS开发中的Html解析方法 本文作者为大家介绍了在iOS开发中的Html解析方法,并同时提供了Demo代码的下载链接,Demo 解析了某个网站(具体可在代码中查看)的html网页,提取了图片以及标 ...

  5. IOS开发中如何判断程序第一次启动(根据判断结果决定是否显示新手操作引导)

    IOS开发中如何判断程序第一次启动 在软件下载安装完成后,第一次启动往往需要显示一个新手操作引导,来告诉用户怎么操作这个app,这就需要在程序一开始运行就判断程序是否第一次启动,如果是,则显示新手操作 ...

  6. ios开发中超简单抽屉效果(MMDrawerController)的实现

    ios开发中,展示类应用通常要用到抽屉效果,由于项目需要,本人找到一个demo,缩减掉一些不常用的功能,整理出一个较短的实例. 首先需要给工程添加第三方类库 MMDrawerController: 这 ...

  7. 总结iOS开发中的断点续传那些事儿

    前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...

  8. iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】

                   在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ...

  9. iOS开发中的4种数据持久化方式【一、属性列表与归档解档】

    iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹.ios开发中, ...

随机推荐

  1. KMP算法的优化与详解

    文章开头,我首先抄录一些阮一峰先生关于KMP算法的一些讲解. 下面,我用自己的语言,试图写一篇比较好懂的 KMP 算法解释. 1. 首先,字符串"BBC ABCDAB ABCDABCDABD ...

  2. 浅析=======Struts2之==========valueStack

    今天刚学习了struts2的valueStack,在这里把自己学到的做个分享,说道valueStack就不得不提OGNL表达式=== struts2工作流程 1.OGNL(Object Graph N ...

  3. .NET MD5加密解密代码

    MD5简介: 是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数).不管是MD2.MD4还是MD5,它们都需要获 ...

  4. 可扩展标记语言XML

    XML简述 XML用于描述数据,是当前处理结构化文档信息的有力工具.与操作系统编程语言的开发平台无关,可以实现不同系统之间的数据交互. 结构 <?xml version="1.0&qu ...

  5. swift -- 集合

    swift -- 集合 //注意:集合中的元素是无序的,并且不想数组,字典那样,没有索引和键. 1.创建一个空集合 var set1 : Set<Int> = Set<Int> ...

  6. JS事件监听器 addEventListener

    一:例如:给id为mydiv1的div元素添加click事件监听器document.getElementById("mydiv1").addEventListener(" ...

  7. Linux supervisord配置使用

    supervisor官方网站 http://supervisord.org 1.安装supervisord Ubuntu: $sudo apt-get install python-setuptool ...

  8. css3 的 calc()函数在布局中的使用----头部高度固定,页面正好占满一屏

    最近项目遇到一个布局需求,头部高度固定,页面需要刚好占满一屏幕. 如下示意图: 方法:使用calc .wrap{ position: relative; margin-left: 24px; marg ...

  9. C中运算符优先级

    总体规则: 特殊运算符>单目运算符>双目运算符>三目运算符>赋值运算符>逗号运算符 只有单目运算符是右结合,其余的均为左结合

  10. 如何在RecyclerView上面实现"拖放"和"滑动删除"-1

    Android上面有许多的教程, 库和示例, 在RecyclerView上面实现"拖放"和"滑动删除"功能. 尽管有更新, 更好的方法可用, 但是大多数人依然使 ...