2017-03-16 16 views
0

別のクラスのボタンでpopupViewを作成しました。ポップアップビューでボタンをタップすると、完了ハンドラ内に移動する必要があります。ボタンがタップされた後にメソッド補完ブロックを呼び出す

例。 UIAlertAction actionWithTitle:...:ハンドラ^ {}; OKボタンでalertViewを開きます。ボタンがタップされると、私は完成ハンドラの中で作業するようになる。

このように作成することは可能ですか?もしそうなら、Objective-Cでこれをどのように作成できますか?

@protocolを使って作成する方法を知り、クラスのプロトコルを設定してメソッドを呼び出します。私は多くのビューコントローラのためにこのクラスを使用する必要があるので、私はクラスを実装する前にプロトコルメソッドを呼びたくありません。スウィフト3 - -

func action(completion:@escaping (_:Bool) -> Void) { 

} 

action { (success) in 

} 

- Objective Cの - 完了ハンドラ

で関数を作成するには

答えて

2

(目的C)

ブロックでプロパティを作成するには、popを​​作成したコードew。

ボタンアクションで
@property (nonatomic, strong) void (^actionHandler)(void); 

-

- (IBAction)doneButtonAction:(id)sender { 
    _actionHandler(); 
} 

//あなたはハンドラ

[popView setActionHandler:^{ 
     // DO Whatever you want, you just need to write this whenever you show pop view, rest code only once. 
}]; 
+0

私は返信のためにこのような感謝のようにしたかった。 – Jaff

1

あなたはブロックでこれを試すことができます

- (void)action:(void (^)(bool success))completionHandler { 

} 

[self action:^(bool success) { 

}]; 
+0

こんにちは、どうやって使用しますか?ボタンをタップしたときと同様に、完了ハンドラの中に入力する必要があります – Jaff

+0

更新された回答を確認してください –

+0

返信ありがとうございます。それは私が望むように見えません。しかし私は私の別の仕事のためにこのコードを使用することができますので、私はあなたのためにupvote。私はArunのような答えとSAMが答えたかった。 – Jaff

1

を定義popViewあなたが表示されたとき、私は2別々のクラス、ViewController.hとPopupViewController.hを作成しました

ViewController.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController 


@end 

ViewController.m

#import "ViewController.h" 
#import "PopupViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 


- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(IBAction)btnOkPressed:(id)sender 
{ 
    PopupViewController *master=[PopupViewController sharedInstance]; 
    [self presentViewController:master animated:YES completion:^{ 

    }]; 
    [master callCompletion:^(NSString *str) { 
     NSLog(@"%@",str); 
     [master dismissViewControllerAnimated:YES completion:^{ 

     }]; 
    }]; 
} 


@end 

PopupViewController.h

#import <UIKit/UIKit.h> 

typedef void(^Completionhandler)(NSString* str); 

@interface PopupViewController : UIViewController 

+(PopupViewController*)sharedInstance; 
-(void)callCompletion:(Completionhandler)handler; 

@end 

PopupViewController.m

#import "PopupViewController.h" 

@interface PopupViewController() 
{ 
    @private 
    Completionhandler _myHandler; 
} 

@end 

@implementation PopupViewController 

+(PopupViewController*)sharedInstance 
{ 
    static PopupViewController *popup=nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     popup = [[PopupViewController alloc] initWithNibName:@"PopupViewController" bundle:nil]; 
    }); 
    return popup; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(IBAction)btnOkPressed:(id)sender 
{ 
    _myHandler(@"test msg"); 
} 

-(void)callCompletion:(Completionhandler)handler 
{ 
    _myHandler = handler; 
} 

@end 

私はあなたがあなたの答えを持っていることを願っています。疑問があれば、私に相談してください。:)

+0

@Jaffあなたは正しい人物としてこれらの回答を得て、私の評判を高めるのに役立つように投票してください。 – SAM

+0

応答SAMをありがとう。私はあまりにもUIViewとしてこれを使用する? – Jaff

+0

確かに間違いなく...どうして;):D – SAM

関連する問題