您的位置:首页 > 产品设计 > UI/UE

【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"));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: