1.OC中
聲明Block
.h文件中
@interface notNetWorkView : UIView
@property (nonatomic, copy) void(^notNetWorkBlock)();
@end
.m文件中
UIButton *noNetBtn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 39)];
[noNetBtn addTarget:self action:@selector(noNetBtnClick:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:noNetBtn];
- (void)noNetBtnClick:(UIButton *)send {
if (self.notNetWorkBlock) {
self.notNetWorkBlock();
}
}
在需要使用的頁面調用
self.netWorkNotConnectView.notNetWorkBlock = ^(){
JWNetworkNotConnectVC *CompletePersonData = [[UIStoryboard storyboardWithName:@"NetWorkConnect" bundle:nil] instantiateViewControllerWithIdentifier:@"NetworkNotConnect"];
[weakSelf.navigationController pushViewController:CompletePersonData animated:YES];
};
2.Swift中
import UIKit
typealias btnBlock = (Int) -> () //聲明
class RolodexNav1: UIView {
var btnBlock:btnBlock? //初始化
@IBAction private func btnClick(_ sender: UIButton) {
//tag: 1 排序 2 pop
if self.btnBlock != nil {
btnBlock!(sender.tag) //調用
}
}
}
3.案例一
block回調
UMengShareManage調用testFunction
UMengShareManage.testFunction(title,desc,shareBack: {(err:Error?) -> () in
//用err參數toDoSomething
})
testFunction回調block的實現細節
定義一個block類型,
typealias ShareBack = (Error?) -> ()
設置一個ShareBack類型block全局變量
static var shareBackBlock:ShareBack?
在數據處理完后用block把數據傳出來
UMengShareManage.share(plattype: plattype, messageObject: messageObject, viewController: VC) { (data:Any?, error:Error?) in
if shareBackBlock != nil {
self.shareBackBlock!(error)
}
}
在testFunction中執行全局block把數據放在shareBack block參數中傳回去
UMengShareManage. testFunction(title:String?,desc:String?,shareBack:@escaping ShareBack){
self.shareBackBlock = {(err:Error?) -> () in
shareBack(err)
}
})
4.案例二
swift中閉包回調把數據傳過來