0

次の簡単なView Controllerクラスをセットアップしました

@protocol ThermoFluidsSelectorViewControllerDelegate;

@interface ThermoFluidsSelectorViewController : UIViewController <UITextFieldDelegate>
@property (weak, nonatomic) id <ThermoFluidsSelectorViewControllerDelegate> delegate;
// user hits done button
- (IBAction)done:(id)sender;
@end

@protocol ThermoFluidsSelectorViewControllerDelegate <NSObject>
-(void) didFinishSelection:(ThermoFluidsSelectorViewController *)controller fluidID:    (NSString *)fluidID;
@end

「didFinishSeletion: fluidID:」メソッドはマスター ビュー コントローラーで定義されており、呼び出されたときにセレクター ビュー コントローラーを閉じる必要があります。完了ボタンが押されると、次のメソッドが呼び出されます。

- (IBAction)done:(id)sender
{
    [[self delegate] didFinishSelection:self fluidID:nil];
}

「done:」メソッドが呼び出されますが (アラートでチェックされます)、「didFinishSelection...」は呼び出されないため、ビューはメイン画面に戻りません。何か案は?

4

1 に答える 1

0

マスタービューコントローラーでデリゲートを割り当てていないようです。

デリゲートを設定するマスタービューコントローラーには、次のようなものが必要です。

    ThermoFluidsSelectorViewController *view = [[ThermoFluidsSelectorViewController alloc] init];
    view.delegate = self;

ここでは、ビューを作成してから、ビューのデリゲートを自分自身に戻すことができます。

プログラムでThermo...ビューコントローラを作成していないが、ストーリーボードを使用している場合は、マスタービューコントローラのprepareForSegue:メソッドでデリゲートを設定できます。

// Do some customisation of our new view when a table item has been selected
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure we're referring to the correct segue
    if ([[segue identifier] isEqualToString:@"MySegueID"]) {

    // Get reference to the destination view controller
    ThermoFluidsSelectorViewController *cont = [segue destinationViewController];

    // set the delegate
    cont.delegate = self;

お役に立てれば。

于 2012-05-14T01:18:42.523 に答える