在开发过程中,经常遇到如下情况:
A push B
B 执行某些事件后,需要回调或通知A 执行具体事件。
这种情况下大多会使用Block回调来实现。
本文讲述使用performSelector:withObject:来实现回调。
直接代码:
接收回调页面代码
//接收回调页面
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//STValueBackViewController 是目标页面
STValueBackViewController *callBackVC = [[STValueBackViewController alloc] init];
//这里需要注意:如果回调携带参数,要追加冒号。
//sel 是方法名
//self 是接受回调的实例
//callBackParam是目标页面需要的参数
callBackVC.callBackParam = @{
@"sel" : @"nslogCallBackMessage:",
@"instance" : self,
};
[self.navigationController pushViewController:callBackVC animated:YES];
}
/**
接收回调处理
@param param 参数
*/
- (void)nslogCallBackMessage:(NSString *)param
{
NSLog(@"执行了回调~ 内容是%@",param);
}
目标页面代码
- (IBAction)callBackEvent:(id)sender
{
if (self.callBackParam) {
//取出方法名
NSString *sel = [self.callBackParam objectForKey:@"sel"];
//取出接收回调实例变量
Class instance = [self.callBackParam objectForKey:@"instance"];
if (sel && instance) {
//将方法名转换成方法
SEL seletor = NSSelectorFromString(sel);
//检查接收回调的实例变量是否有该方法
if ([instance respondsToSelector:seletor]) {
//执行方法
[instance performSelector:seletor withObject:@"回调参数"];
}
}
}
}
执行结果: