iOS 页面传值方式 单例,block,代理协议方法,通知中心
2016-03-13 19:14
363 查看
实现了以下iOS页面间传值:1.委托delegate方式;2.通知notification方式;3.block方式;4.UserDefault或者文件方式;5.单例模式方式;6.通过设置属性,实现页面间传值
情况一 属性传值
属性传值用于正向传值,比如从a界面跳转到b页面。在a界面导入b页面的头文件,给创建的b类的b对象的属性赋值,代码如下
在要跳转的b界面,添加个属性
@interface ShuxingViewController : UIViewController //@property (weak, nonatomic) IBOutlet UILabel *Shuxinglabel; @property (weak, nonatomic) IBOutlet UILabel *Slabel; @property(strong,nonatomic)NSString *String;
在a界面
ShuxingViewController *Shuxing=[[UIStoryboard storyboardWithName:@"Main" bundle:nil]instantiateViewControllerWithIdentifier:@"ShuxingViewController"]; Shuxing.String=self.ShuxingTextField.text; [self.navigationController pushViewController:Shuxing animated:YES];
情况二 delegate协议方法
这个可以应用于反向传值,就是a页面,跳转到b页面,b在有值要传回a页面。
首先在b界面要声明一个带参数的协议方法-(void)show:(NSString )strig;
#import <UIKit/UIKit.h>
@protocol DelegateViewControllerDelegate
@optional
-(void)show:(NSString )strig;
@end @interface DelegateViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *DelegateTextfield; @property (nonatomic, weak) id <DelegateViewControllerDelegate> delegate; - (IBAction)DeBack:(id)sender; @end
在b的.m文件里,当点击返回按钮以后,要调用这个协议方法,并传入这个要传的参数 self.DelegateTextfield.tex
- (IBAction)DeBack:(id)sender { [self.delegate show:self.DelegateTextfield.text]; }
在b里面声明了这个方法-(void)show:(NSString *)strig; 然后并且调用了,那在哪里实现这个方法呢?对了,在a界面实现它
在a界面,导入这个b界面的头文件,
#import "DelegateViewController.h" #import "ViewController.h" #import "ShuxingViewController.h" @interface ViewController ()<DelegateViewControllerDelegate> @end
注意,这一定要写的
@interface ViewControlle()<DelegateViewControllerDelegate>
然后在a的.m文件里面实现-(void)show:(NSString )strig 这个方法
-(void)show:(NSString )strig{
NSLog(@"%@",strig); self.ViewDeLabel.text=strig; }
如果只完成了上面的步奏,还是不能传值的。还要在a的.m文件里点击进入b页面的方法里,让创建的b对象,遵守delegate
- (IBAction)DelegatecLick:(id)sender { DelegateViewController *ssssss=[[UIStoryboard storyboardWithName:@"Main" bundle:nil]instantiateViewControllerWithIdentifier:@"DelegateViewController"]; ssssss.delegate=self; [self.navigationController pushViewController:ssssss animated:YES]; }
情况三 block 传值
关于block 有两篇介绍 block介绍:http://blog.csdn.net/totogo2010/article/details/7839061 一篇描述block回调挺有意思的文章: http://blog.csdn.net/mobanchengshuang/article/details/11751671下面说下怎么用block传值
首先在b页面的.h中 定义一个block,传一个NSString的参数
typedef void (^ablock)(NSString *str);
并且声明一个ablock的属性
@property (nonatomic,copy) ablock block;
在b的.m 当点击把参数传给上个页面的方法里,实现这个block
- (IBAction)BlockBack:(id)sender { self.block(self.BlcokTextfield.text); }
在b的控制器里面实现了这个block以后,要回到a的.m里面去回调这个block
- (IBAction)BlcokcLick:(id)sender { BlockViewController *ssssss=[[UIStoryboard storyboardWithName:@"Main" bundle:nil]instantiateViewControllerWithIdentifier:@"BlockViewController"]; ssssss.block=^(NSString *str){ //当这个block 在b页面里面实现了以后,这个代码块里面的内容就会被执行 self.BlcokLabel.text=str; }; [self.navigationController pushViewController:ssssss animated:YES]; }
单例模式
首先要先创建一个单例的类
.h
#import <Foundation/Foundation.h> @interface LittleSinge : NSObject @property(nonatomic,strong)NSString *kk; +(LittleSinge *)sharedLittleSinge; @end
.m
#import "LittleSinge.h" @implementation LittleSinge //下面这样写 是保证SingleCommone 这个类只会被创建一次 +(LittleSinge *)sharedLittleSinge{ static LittleSinge *singleCommone = nil; static dispatch_once_t once; dispatch_once(&once, ^{ singleCommone = [LittleSinge new]; }); return singleCommone; } @end
创建好单例文件以后呢,在要传值的页面,导入单例的头文件 对,就像这样
#import "LittleSinge.h" #import "SingeleViewController.h"
在b的.m传值返回上个页面的方法里,给
- (IBAction)SingleBack:(id)sender { [LittleSinge sharedLittleSinge].kk=self.SingleText.text; }
在a的.m的viewWillAppear方法里
-(void)viewWillAppear:(BOOL)animated{ self.SingleLabel.text=[LittleSinge sharedLittleSinge].kk; }
相关文章推荐
- iOS YYText的使用笔记一(YYTextView图文编辑器)
- 解决iOS打印数组和字典中文显示异常问题
- IOS中如何切换到主线程工作
- iOS的NSString和NSDate之间的转换
- iOS开发推送小结
- iOS 单元测试之XCTest详解(一)
- IOS开发 统计XCODE 代码行数
- iOS-Block和对象的内存管理(三)
- Mac开发中NSUserDefaults用法解析
- iOS 中的Category
- iOS-Block和变量的内存管理(二)
- iOS-Block的实现(一)
- iOS原生条形码扫描
- iOS中的单例模式
- ARC & MRC下string内存管理策略探究
- HDU.1017A Mathematical Curiosity【遍历求解】
- CAMetalLayer 浅析
- iOS日历中给一个事件添加多个提醒
- iOS日历中给一个事件添加多个提醒
- iOS日历中给一个事件添加多个提醒