【UI】传值:协议传值、Block传值 、StroyBoard属性传值
2015-10-15 16:13
459 查看
1. 协议传值:
1:
指定协议
2: 定一个代理人对象属性,只有实现了上面定义的协议方法的对象,才能成为第二个页面的代理人
3: 让自己的代理人(delegate)去执行协议方法
4:
签订协议
5: 把自己设置为第二个页面的代理人
6: 实现方法
UI协议常用的单词 will did should
使用系统的协议
1、签订协议:UIAlertViewDelegate
2、指定代理人:一般来说是self
3、实现协议方法
2.StroyBoard属性传值
StoryBoard----注意事项
初始化在下面的方法里写
-(void)awakeFromNib
{
}
第一步:
在故事板中点击右图所示的两个viewcontroller之间的小按钮segue
第二步:
在右侧设置segue的identifier
第三步:
在下面的方法中实现传值。
- (void)prepareForSegue:(UIStoryboardSegue *)segue
sender:(id)sender
{
//在导航控制器推出一个新的控制器之前 调用这个方法
NSLog(@"segue name:%@",
segue.identifier);
if ([segue.identifier isEqualToString:@"bigCup"])
{
//获取下一个页面的对象
UIViewController *viewVC = segue.destinationViewController;
viewVC.title = @"bigCup";
viewVC.view.backgroundColor =
[UIColor magentaColor];
}
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
3.block传值
1.在第一个页面实现一个block,在第二个页面设置一个相同类型的block属性(如果一个block变量作为一个类的属性, 必须要使用copy修饰)
2.按照属性传值的方式把block给第二个页面
3.第二个页面在适合的适合调用block
为什么block作为属性要用copy
block1在全局区
如果在block的代码中,使用了block以外的变量,系统会把block指针转移到栈区。
使用copy属性赋值之后, block就会被系统转移到堆区。
堆区的内存是我们自己管理的,而栈区是系统管理的
//block语法
//1.无参无返回值
//返回值类型 (^block名称)
(参数类型 参数名)
= ^(参数类型 参数名){};
void(^block1)(void)
= ^(void){
NSLog(@"aaa");
};
//block的调用`
block1();
//2.有参数无返回值
void(^block2)(int a, NSString *string)
= ^(int a, NSString *string){
NSLog(@"%d %@",
a, string);
};
block2(6, @"sb");
//3.无参有返回值
int(^block3)(void)
= ^(void){
return 10;
};
int a = block3();
NSLog(@"%d",
a);
//4.有参有返回值
NSString *(^block4)(NSString *title)
= ^(NSString *title){
return [title stringByAppendingString:@"
sb"];
};
NSLog(@"%@",
block4(@"hehe"));
1:
指定协议
2: 定一个代理人对象属性,只有实现了上面定义的协议方法的对象,才能成为第二个页面的代理人
3: 让自己的代理人(delegate)去执行协议方法
4:
签订协议
5: 把自己设置为第二个页面的代理人
6: 实现方法
UI协议常用的单词 will did should
使用系统的协议
1、签订协议:UIAlertViewDelegate
2、指定代理人:一般来说是self
3、实现协议方法
2.StroyBoard属性传值
StoryBoard----注意事项
初始化在下面的方法里写
-(void)awakeFromNib
{
}
第一步:
在故事板中点击右图所示的两个viewcontroller之间的小按钮segue
第二步:
在右侧设置segue的identifier
第三步:
在下面的方法中实现传值。
- (void)prepareForSegue:(UIStoryboardSegue *)segue
sender:(id)sender
{
//在导航控制器推出一个新的控制器之前 调用这个方法
NSLog(@"segue name:%@",
segue.identifier);
if ([segue.identifier isEqualToString:@"bigCup"])
{
//获取下一个页面的对象
UIViewController *viewVC = segue.destinationViewController;
viewVC.title = @"bigCup";
viewVC.view.backgroundColor =
[UIColor magentaColor];
}
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
3.block传值
1.在第一个页面实现一个block,在第二个页面设置一个相同类型的block属性(如果一个block变量作为一个类的属性, 必须要使用copy修饰)
2.按照属性传值的方式把block给第二个页面
3.第二个页面在适合的适合调用block
为什么block作为属性要用copy
block1在全局区
如果在block的代码中,使用了block以外的变量,系统会把block指针转移到栈区。
使用copy属性赋值之后, block就会被系统转移到堆区。
堆区的内存是我们自己管理的,而栈区是系统管理的
//block语法
//1.无参无返回值
//返回值类型 (^block名称)
(参数类型 参数名)
= ^(参数类型 参数名){};
void(^block1)(void)
= ^(void){
NSLog(@"aaa");
};
//block的调用`
block1();
//2.有参数无返回值
void(^block2)(int a, NSString *string)
= ^(int a, NSString *string){
NSLog(@"%d %@",
a, string);
};
block2(6, @"sb");
//3.无参有返回值
int(^block3)(void)
= ^(void){
return 10;
};
int a = block3();
NSLog(@"%d",
a);
//4.有参有返回值
NSString *(^block4)(NSString *title)
= ^(NSString *title){
return [title stringByAppendingString:@"
sb"];
};
NSLog(@"%@",
block4(@"hehe"));
相关文章推荐
- 关于选择照片和拍照
- 重写View的一些方法
- Uri类使用的理论基础--Uri结构分析与
- 《设计之下》读书笔记——交互设计
- pyuic的参数,以及如何使用由ui转换的.py文件
- 泛谈移动互联时代的交互设计师
- 交互设计|设计方案记分对比法
- pat 1099. Build A Binary Search Tree (30)
- UE4 COLLISION FILTERING
- 接触UI
- UE4 Collision Response Reference
- Munzekonza_random_forestinstallation guide
- UE4 Collision Overview
- 在Event内部监测鼠标事件,对窗体内控件调用move动作,UI不刷新
- 限制UITextField只可以输入数字
- request.getRequestURI() 、request.getRequestURL()
- Java Map Key-Value
- request.getRequestURI() 、request.getRequestURL()
- 常用的交互设计软件
- Interface Builder操作