一直知道block有反向傳值的功能,自己做了個測試。
第一個頁面有一個label,第二個頁面有個UITextField。
當在UITextField輸入值后,點擊導航欄上的back按鈕,可以將UITextField上面的值反回到第一個頁面的label上。
#import"ViewController.h"
#import"SecondViewController.h"
@interfaceViewController()
{
UILabel*label;
}
@end
@implementationViewController
- (void)viewDidLoad {
[superviewDidLoad];
label= [[UILabelalloc]initWithFrame:CGRectMake(100,100,100,50)];
label.backgroundColor= [UIColorwhiteColor];
[self.viewaddSubview:label];
self.navigationItem.rightBarButtonItem= [[UIBarButtonItemalloc]initWithTitle:@"next"style:UIBarButtonItemStyleDonetarget:selfaction:@selector(next:)];
}
-(void)next:(UIBarButtonItem*)sender{
SecondViewController*sVC= [[SecondViewControlleralloc]init];
[self.navigationControllerpushViewController:sVCanimated:YES];
sVC.block=^(NSString*string)
{
label.text= string;
returnstring;
};
第二個頁面的.h
#import
//聲明一個有返回值的名字叫sendValue的block
typedefNSString*(^sendValue)(NSString*) ;
@interfaceSecondViewController :UIViewController
//把block定義為屬性
@property(nonatomic,strong)sendValueblock;
@end
.m
#import"SecondViewController.h"
@interfaceSecondViewController()
{
UITextField*textField;
}
@end
@implementationSecondViewController
- (void)viewDidLoad {
[superviewDidLoad];
textField= [[UITextFieldalloc]initWithFrame:CGRectMake(100,100,100,50)];
textField.backgroundColor= [UIColorwhiteColor];
[self.viewaddSubview:textField];
self.navigationItem.rightBarButtonItem= [[UIBarButtonItemalloc]initWithTitle:@"back"style:UIBarButtonItemStyleDonetarget:selfaction:@selector(back:)];
}
-(void)back:(UIBarButtonItem*)sender{
self.block(textField.text);//調(diào)用block
[self.navigationControllerpopToRootViewControllerAnimated:YES];
}
@end