2

私は2つ持っていますUIViewController

  • MainVC
  • PickerVC

メインビューコントローラには、IBActionメソッドがあります。--showPickerView

この方法では、PickerVCビューを表示するブロックを作成し、PickerVCビューで値を選択して[完了]ボタンを押すまで待つ必要があります。

このブロックでは、[完了]ボタンを押した後にMainVCのメソッドを呼び出すコールバックを実装する必要があります。

なので、以前はブロックを使ったことがありますが、自分で実装する方法がわかりません。

最初の部分は次のようになると思います。

- (IBAction)showPickerView {
   __block PickerVC *pickerVC = [[PickerVC alloc] init];
   [pickerVC setFinishBlock:^{
      // Do something after user press on Done button
   }];
   [pickerVC setFailedBlock:^{
      // Do something if something wrong (but this method optional)
   }];
   [pickerVC showPicker];
}
4

1 に答える 1

7

PickerVCのヘッダーに2つのtypedefを追加します

typedef void (^FinishBlock)();
typedef void (^FailedBlock)();

setFinishedBlockの宣言はFinishBlockを取ります

- (void)setFinishBlock:(FinishBlock)finishBlock;
- (void)setFailedBlock:(FailedBlock)failedBlock;

ブロックごとにiVarを作成します

@interface PickerVC : UIViewController
{
  FinishBlock _finishBlock;
  FailedBlock _failedBlock;
}

の定義で、パラメータをiVarsに設定しsetFinishedBlock:ますsetFailedBlock:

PickerVCが失敗するか、呼び出し_failedBlockまたはを終了するとすぐに_finishedBlock

この__blockステートメントは、変数がブロックで使用されている場合に、変数がメモリにとどまるために使用されます。したがって、上記のコードでは必要ありません

于 2012-07-26T09:54:45.123 に答える