您的位置:首页 > 移动开发 > IOS开发

iOS 开发各种传值

2016-06-22 00:00 381 查看
摘要: iOS开发 界面传值

一. 属性传值(正向):

[code=language-objectivec]1. 在第二个界面声明属性
@property(nonatomic,strong)NSString*str;

2. 在第一个界面执行跳转时赋值
second.str=@"属性传值";

3. 取值
nslog(@"%@",str);


二. Block传值(反向)

[code=language-objectivec]//1 第二个界面.h文件定义block
@property(nonatomic,assign)void(^block)(NSString*);
//2 第二个界面.m文件赋值
self.block(@"block传值");
//3 第一个界面.m文件调用
SecondViewController*second=[[SecondViewController alloc]init];
second.block=^(NSString*value){
NSLog(@"%@",value);
};


二. 代理传值(正向传值为例):

[code=language-objectivec]/*1*/在FirstViewController.h中
#import <UIKit/UIKit.h>

// 声明协议
@protocol PassWordDelegate

-(void)passWordDelegate:(NSString*)str;

@end

@interface FirstViewController : UIViewController
// 设置代理属性
@property(nonatomic,retain)id<PassWordDelegate>delegate;

@end

/*2*/在FirstViewController.m中
#import "SecondViewController.h"

//点击方法
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
SecondViewController*second=[[SecondViewController alloc]init];
self.delegate=second;//指定代理
[self.delegate passWordDelegate:@"代理传值"];//代理传值

[self presentViewController:second animated:NO completion:nil];
}

/*3*/遵循协议

/*4*/在SecondViewController.m中
//执行协议方法,接收传过来的值
-(void)passWordDelegate:(NSString *)str
{
NSLog(@"%@",str);
}


三 单例传值:

单例传值可以理解为定义一个全局变量进行传值

[code=language-objectivec]//1 新建一个单例类,在.h文件中
#import <Foundation/Foundation.h>

@interface Singleton : NSObject
//声明属性(可设置多个属性)
@property(nonatomic,strong)NSString*passData;

+(instancetype)sharedSingleton;

@end

//2 在.m文件中初始化单例
static Singleton*singleton=nil;
//创建单例
+(instancetype)sharedSingleton{
if (singleton==nil) {
singleton=[[Singleton alloc]init];
}
return singleton;
}

//3 赋值
NSString*str=@"单例传值";
Singleton*single=[Singleton sharedSingleton];
single.passData=str;

//4 取值
Singleton*single=[Singleton sharedSingleton];
NSLog(@"***%@",single.passData);


四 通知:

[code=language-objectivec]//一:发送通知
//字典
NSDictionary*dic=@{@"a":@"1",@"b":@"2",@"c":@"3"};
//发送通知
[[NSNotificationCenter defaultCenter]postNotificationName:@"通知" object:nil userInfo:dic];

//二: 接收消息
//注册通知(等待接收消息)
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(value:) name:@"通知" object:nil];
-(void)value:(NSNotification*)sender{
NSLog(@"%@",sender.userInfo);
//注意关闭通知,否则下次监听还会收到这次的通知
[[NSNotificationCenter defaultCenter]removeObserver:self];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息