IOS传值的几种方式
2015-12-18 17:59
543 查看
1.代理 一对一
在第二个页面设置代理
1.1在最上方设置
//选择房间的代理@protocol RoomVCDelegate <NSObject>
1.2设置代理方法
//方法-(void)selectRoomName:(NSString *)name;
1.3定义委托对象
@property (nonatomic,assign)id<RoomVCDelegate>delegate;在第一个页面(添加代理方法)
需要设置 代理对象
self.delegate= self;
调用代理方法 把传值对象赋值
-(void)selectRoomName:(NSString *)name{
最后就是把要穿的值(在第二个界面调用 )
[_delegateselectRoomName:@"文化轩"];
2.block块 一对一(优点 高效快速)
首先 在第二个界面定义一个block块两种定义block的方式
第一种定义方式
@property (nonatomic,copy)void (^backValues)(NSString *str);
在第二个页面定义完后 把值付给block方法
self.backValues(@"大歌星");
在第一个页面 获取到第二个页面的对象 这个时候就只能用self获取 第一个页面的ui控件
Vc.backValues=^(NSString *str){
[self.buttonsetTitle:strforState:UIControlStateNormal];
};
使用block是应注意以下几个方面 以下几个例子
__block是用空间的 因为是异步的必须用__block
__blockUIImage *image1 =nil;
//__weak避免循环引用
__weakViewController *weakSelf =self;
dispatch_group_async(group, groupT, ^{
image1 = [weakSelf downloadImage:@"http://a.hiphotos.baidu.com/image/pic/item/8644ebf81a4c510f19c75c136259252dd42aa5bc.jpg"];
});
__blockUIImage *image2 =nil;
__weakViewController *weakSelf2 =self;
dispatch_group_async(group, groupT, ^{
image2 = [weakSelf2 downloadImage:@"http://a.hiphotos.baidu.com/image/pic/item/8644ebf81a4c510f19c75c136259252dd42aa5bc.jpg"];
});
//主线程就不需要用__block
dispatch_group_notify(group,dispatch_get_main_queue(), ^{
_image1.image = image1;
_image2.image = image2;
});
第二种第一方式
typedef void(^Block) (int,NSString*);
@property (nonatomic,assign)Block block;
这里两个需要连起来使用
基本和第一种写法一致
通知 一对多
//NSNotificationCenterdefaultCente //创建通知//添加一个响应者 通知中心 最后一个参数具体对象或者nilnil是这一类对象发生改变就会改变
[[ NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(textChange:)name:UITextFieldTextDidChangeNotificationobject:textField];}];
object 响应者
////移除通知中心
[[NSNotificationCenterdefaultCenter]removeObserver:selfname:UITextFieldTextDidChangeNotificationobject:alert.textFields.firstObject];
4.正向传值(比较简单不在详细举例)
5.storyboard 传值 利用segue
5.1在storyboard 建立连线器5.2在segue设置标识
5.3根据segue找到相应的连线器
在 这个方法中
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
比如在第二个界面需要接数据以一个全局的model模型
传过去的是一个model模型
if ([segue.identifier isEqualToString:@"one"]) {
menuModel *model = [_rowArray[_currentSection]objectAtIndex:_selectRow];
detailViewController *Vc = segue.destinationViewController;
Vc.model = model;
}else if ([segue.identifier isEqualToString:@"two"]){
menuModel *model = [_rowArray[_currentSection]objectAtIndex:_selectRow];
detailViewController *Vc = segue.destinationViewController;
Vc.model = model;
}
}
直接在第二个界面 用model模型去赋值
相关文章推荐
- 全面理解iOS开发中的Scroll View
- iOS APNS远程推送
- iOS开发 使用Xcode自带的Leaks:动态的检测内存泄露
- [IOS] NSOutputStream向输出流写数据
- [IOS] NSInputStream从输入流里读入数据
- iOS学习笔记1 -- 触摸与手势
- IOS判断日期是今天,昨天还是明天
- iOS ble关键开发步骤
- iOS之个人工作常用知识
- iOS- NSTimeInterval获取时间间隔
- iOS 学习日志 : Xcode添加启动图
- iOS开发----百度地图定位之KCLErrorDomain Code = 0的解决方法
- ios的安全机制
- ios的安全机制
- ios按钮事件的block封装
- iOS ChildViewController详解
- ios 无法看到崩溃日志
- iOS根据输入的时间获取当天是星期几
- iOS addChildViewController 详解
- iOS将颜色转换image方法