delegate方式和block方式
解決方案一:delegate方式
從當前頁面傳值給上一個頁面,使用delegate
回傳值
第一個頁面:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
//獲取跳轉的ViewController
SecondViewController* vc = segue.destinationViewController;
vc.delegate = self;
}
//實現協議方法
-(void)userDidEnterName:(NSString *)info{
self.nameLabel.text = info;
}
第二個頁面:
.h文件
@protocol DataEnterDelegate<NSObject>
-(void)userDidEnterName:(NSString* )info;
@end
@interface SecondViewController : UIViewController<UITextFieldDelegate>
@property (nonatomic) id <DataEnterDelegate> delegate;
@end
.m文件
//點擊按鈕返回前一個頁面
- (IBAction)okBtPressed:(id)sender {
[_delegate userDidEnterName:self.nameTxt.text];
[self.navigationController popViewControllerAnimated:YES];
}
解決方案二:block方式
第一個頁面:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
SecondViewController* vc = segue.destinationViewController;
//給后一個頁面的成員變量block賦值
vc.returnValueBlock = ^(NSString* text){
self.nameLabel.text = text;
};
}
第二個頁面:
.h文件
typedef void(^returnValueBlock)(NSString* text);
@interface SecondViewController : UIViewController<UITextFieldDelegate>
@property(nonatomic) returnValueBlock returnValueBlock;
-(void)returnValue:(returnValueBlock)block;
@end
.m文件
//set block
-(void)returnValue:(returnValueBlock)block{
self.returnValueBlock = block;
}
- (IBAction)blockBtPressed:(id)sender {
if (self.returnValueBlock != nil) {
self.returnValueBlock(self.nameTxt.text);
}
[self.navigationController popViewControllerAnimated:YES];
}
iOS新手上路,多多指教……(_)