新手介绍简单一下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开发中, ...
随机推荐
- 关于Dapper.NET的相关论述
年少时,为何不为自己的梦想去拼搏一次呢?纵使头破血流,也不悔有那年少轻狂.感慨很多,最近事情也很多,博客也很少更新了,毕竟每个人都需要为自己的生活去努力. 最近在一个群里遇到一个人说的话,在这里不再赘 ...
- selenium 运行之后错误提示Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output
错误提示: org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port ...
- Visual Studio 20周年软件趋势随想
从2002年开始,.net让开发人员能快速构建和部署应用程序,便捷的开发windows和web服务器应用,同时著名的hacker Miguel de Icaza ,Miguel 为了GNOME项目启动 ...
- Unity Shader 知识点总结(二)
紧接着上一篇文章的shader入门知识的总结,本文主要总结shader中的纹理贴图.透明度混合.顶点动画.后期特效处理等操作.如果有什么地方有错,请指出更正,谢谢.本文的代码主要来自开源书:unity ...
- 关于Http请求后返回json乱码的问题
其实很多时候我们在做http请求数据返回的时候经常会莫名发现会出现乱码,大部分时候我们都觉得是编码不对造成的. 一般情况下正常我们默认都是作个很简单的操作,直接使用UTF-8编码基本问题就搞定了 Ht ...
- wemall app商城源码Android短信监听接收器
wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改.本文分享其中 ...
- 如何在appconfig中配置服务的ip
开发了一个WindowsService消息服务器,刚开始一直都是在代码中把IP地址写死,所以每次只要是更换了新的IP地址后,都需要重新编译项目.所以考虑把ip配置到config文件中, 这样做的好处是 ...
- 根据模板导出Excel报表并生成多个Sheet页
因为最近用报表导出比较多,所有就提成了一个工具类,本工具类使用的场景为 根据提供的模板来导出Excel报表 并且可根据提供的模板Sheet页进行复制 从而实现多个Sheet页的需求, 使用本工具类时 ...
- android开发之多线程实现方法概述
一.单线程模型 当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件, ...
- web从入门开始(6)-----框架
普通框架 框架概念:就是将一个页面分割成小窗口,每个窗口都是一个网页 框架集和框架页 框架集:<frameset>:主要用来划分窗口的 框架页:<frame>:主要用来指定窗口 ...