2016-11-20 6 views
0

this answerから、デリゲートを使用するよりも簡単なSwiftクロージャを使用してデータを前のView Controllerに戻す方法があるようです。IOS:完了ブロックまたは閉鎖を使用して前のView Controllerにデータを戻す

スウィフト閉鎖はObjective-Cでブロックを使用するのと似ていることを考えれば、誰でも私の目的のCプロジェクトでこれを手助けすることができますか?スウィフトとデリゲートのアプローチは、1つのプロパティを設定するにはあまりにも複雑に思えます。ここで

はSWIFTコードです:

For sending a UIImage back in my case. In ViewControllerA: 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let cropImageViewController = segue.destinationViewController as! CropImageViewController 
    cropImageViewController.choseImage = { image in 
     //Do what you want in here! 
    } 
} 
In ViewControllerB: 

var choseImage : (UIImage -> Void)? 
@IBAction func done(sender: AnyObject) { 
    choseImage?(croppedImage) 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 

私はObjective-Cでセグエの準備が、後方にそれを渡す方法については困惑しています使用して前方にデータを渡すことができます。ここで

//launch VC 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"edit"]) { 
... 
destViewController.contact=contact; 
} 
//set property in presentingVC--THIS DOES NOT WORK. 

self.presentingViewController.afterSave = YES; 
[self dismissViewControllerAnimated:YES completion:nil]; 

答えて

0

あなたは作物のビューコントローラで行うために必要なものです:

インタフェース(.H):

@interface CropImageViewController : UIViewController 

/// Block that returns void , called 'choseImage' and passes back UIImage. 
@property (nonatomic,strong) void(^choseImage)(UIImage *image); 

@end 

実装(.M):

@implementation CropImageViewController 

-(void)done{ 

    // Check if block not nil 
    if(self.choseImage){ 
     // Block usage with UIImage 
     self.choseImage(croppedImage); 
    } 

} 

@end 

セグの準備として:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 

    if ([segue.identifier isEqualToString:@"edit"]) { 
     CropImageViewController *cropVC = [segue destinationViewController]; 
     [cropVC setChoseImage:^(UIImage *image) { 
      // Use image 
     }]; 
    } 

} 
関連する問題