您的位置:首页 > 移动开发 > Objective-C

Block 的 使用

2015-10-27 08:47 459 查看
使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值:

先说一下思想:

首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButton,其中UILabel是为了显示第二个视图控制器传过来的字符串,UIButton是为了push到第二个界面。

第二个界面的只有一个UITextField,是为了输入文字,当输入文字,并且返回第一个界面的时候,当第二个视图将要消失的时候,就将第二个界面上TextFiled中的文字传给第一个界面,并且显示在UILabel上。

其实核心代码就几行代码:

下面是主要代码:(因为我是用storyBoard创建的工程,所以上面的属性和相应的方法,是使用系统生成的outlet)

一、在第二个视图控制器的.h文件中定义声明Block属性

?
1

2

3

4

5

6

7

8

9
typedef

void
(^ReturnTextBlock)(NSString *showText);


 

@interface

TextFieldViewController : UIViewController


 

@property

(nonatomic, copy) ReturnTextBlock returnTextBlock;


 

-
(
void
)returnText:(ReturnTextBlock)block;


 

@end


第一行代码是为要声明的Block重新定义了一个名字

?
1
ReturnTextBlock


这样,下面在使用的时候就会很方便。

第三行是定义的一个Block属性

第四行是一个在第一个界面传进来一个Block语句块的函数,不用也可以,不过加上会减少代码的书写量

二、实现第二个视图控制器的方法

?
1

2

3

4

5

6

7

8

9
-
(
void
)returnText:(ReturnTextBlock)block
{


  
self.returnTextBlock
= block;


}


-
(
void
)viewWillDisappear:(BOOL)animated
{


  
 

  
if

(self.returnTextBlock != nil) {


    
self.returnTextBlock(self.inputTF.text);


  
}


}


其中inputTF是视图中的UITextField。

第一个方法就是定义的那个方法,把传进来的Block语句块保存到本类的实例变量returnTextBlock(.h中定义的属性)中,然后寻找一个时机调用,而这个时机就是上面说到的,当视图将要消失的时候,需要重写:

?
1
-
(
void
)viewWillDisappear:(BOOL)animated;


方法。

三、在第一个视图中获得第二个视图控制器,并且用第二个视图控制器来调用定义的属性

如下方法中书写:

?
1

2

3

4

5

6

7

8

9

10
-
(
void
)prepareForSegue:(UIStoryboardSegue
*)segue sender:(id)sender


{


  
//
Get the new view controller using [segue destinationViewController].


  
//
Pass the selected object to the new view controller.


  
TextFieldViewController
*tfVC = segue.destinationViewController;


  
 

  
[tfVC
returnText:^(NSString *showText) {


    
self.showLabel.text
= showText;


  
}];


}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS objective-c 总结