實現回調傳值的方式有哪些?
1.block
2.delegate
3.NSNotificationCenter
1.block
先聲明一個block (在哪里聲明?)
需要將哪里的內容傳出去就在那里聲明一個block
回調的值放在哪里需要在接口部分 拖拽過來(需要注意拖拽到什么地方?存放回調的值的當前類的接口文件里面 )
比如:label是存放回調值的,則拖拽(按control + label控件 拖到ViewController.h 文件接口內 ,并命名)
textView是存放用戶輸入的需要做回調的空間,以相同的方式拖拽到PushViewController接口內 (當前控件所在的類頭文件內)
需要傳值的視圖代碼
PushViewController.h
typedef void (^Block) (NSString*);
@interface PushViewController :UIViewController
@prooerty (nonatomic)Block PassValueBlock ;
如果省略這個默認為strong
PushViewControlle.m代碼
#import "PushViewController.h"
@interface PushViewController ()
@property (weak, nonatomic) IBOutlet UITextView *textView;
@end
??注意:這個是一個分類,可以隱藏接口實現傳值的過程:視圖消失的時候將輸入的內容作為Block(PassValueBblock)的參數即可
-(void)ViewWillDisappear:animated{
[superviewWillDisappear:animated];
_PassValueBlock(_textView.text);
}```
#####ViewController.m代碼
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *textlLabel;
@end
//:可以隱藏接口
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
PushViewController *pushViewController = segue.destinationViewController;
pushViewController.passValueBlock = ^(NSString *text) {
_textlLabel.text = text;
};
//passValueBlock的生命周期在這個方法內
NSLog(@"%@",pushViewController.passValueBlock);
}
//:ViewController.m內
塊內進行傳值 ,將輸入的數值賦值給回調標簽textLbl.text