IOS基础之界面间传值

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


属性传值

在页面一中定义一个对象,在页面二中赋值即可。

单例传值

单例传值需要有一个单例类,单例类中有类方法,在类方法中用静态变量保存一个需要传值的变量。
单例举例

interface DefaultInstance:NSObject
+(instancetype)sharedInstance;
@property (nonatomic,strong)NSString *str;
@end

@implementation DefaultInstance
+(instancetype) sharedInstance{
	static DefaultInstance *sharedVC=nil;
	if(sharedVC==nil){
		sharedVC=[[DefaultInstance alloc] init];
	}
	return sharedVC;
}

这样在不同位置每次创建拿到DefaultInstance的str元素都是一样的。

代理传值

即delegate方法,委托方持有协议,调用协议方法,代理方遵守协议,实现协议方法即可接受传来的值。

委托方代码

//委托方创建协议
@protocol passValueDelegate <NSObject>
//协议定义传值方法
-(void) passValue:(NSString *)str;
@end

@interface NextViewController:
//定义一个持有协议的id指针
@property (weak)id<passValueDelegate> delegate;
@end
@implementation NextViewController
-(){
	[self.delegate passValue:参数];//向代理发送消息
}
@end

代理方代码

//遵守协议
@interface ViewController ()<passValueDelegate>
@end
@implementation ViewController
-{
	NextViewController *NVC=[[NextViewController alloc] init];
	NVC.delegate=self;//指定自己为代理
}
-(void) passValue:(NSString *)str{
	//在接受到消息时所执行的程序
}
@end

block传值

苹果最推荐最常见的传值方式

@interface NextViewController:
//定义block
//(copy防止循环引用),返回值类型 (^ block的名字)(可选参数)
@property (copy)void (^block)(NSString *);
@end
@implementation NextViewController
-(){
	self.block(参数);
}
@end
@implementation ViewController
-{
	NextViewController *NVC=[[NextViewController alloc] init];
	NVC.block=^(NSString *str){
		//执行语句
	}
}
@end

通知传值

最容易实现跨页面传值(前面为直接调用传值)
接收方先监听,发送方发送后接受方就收到数据了。
接收方

@implementation ViewController
-{
	NextViewController *NVC=[[NextViewController alloc] init];
	//创建通知中心,将自己添加进监听者,选择接受通知后的处理函数,接受通知为notify,监听来自所有的消息(object为nil即为接收所有消息)
	[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(函数名:) name:@"notify" object:nil];
	//使用时
}
-函数名:(NSNotification *)not{
	self.str=not.userInfo[@""];//取字典中数据即可
}

@end

发送方

@implementation NextViewController
-(){
	//发送通知
	//发送的参数值必须是一个字典
	[[NSNotifiicationCenter defaultCenter]postNotificationName:@"notify" object:nil userInfo:@{@"":@""}]; 
}
@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值