0

ボタンを押してポップオーバーを非表示にするコードを書きましたが...動作しません(新しいものはありません)。内部にボタンがあるメイン ビュー (A と呼びます) があり、ボタンを押すとポップオーバーが表示されます (B と呼びます)。ポップオーバーには、ポップオーバーを閉じて A で何かを実行するために使用する別のボタンがあります。つまり、A がメイン ビューで、ボタンを押すとログインを実行するためにポップオーバー (B) が表示されます (資格情報を入力できます)の)。

ログイン ボタン (ポップオーバー内のボタン) を押してサービスを呼び出して資格情報を確認し、ユーザーが認証されている場合は、ポップオーバーを閉じてメイン ビュー (A) を更新します。

以下は私のコードです

ポップオーバー ヘッダー ファイル (B)

#import <UIKit/UIKit.h>
@protocol MyPopoverDelegate <NSObject>
    - (void) didLoginButton;
@end

@interface login : UIViewController
@property (nonatomic, assign) id<MyPopoverDelegate> delegate;

- (IBAction) doLogin;

@end

ポップオーバー実装ファイル (B)

#import "login.h"
@implementation login
@synthesize delegate;

....
..

- (IBAction) doLogin {
   [self.delegate didLoginButton];
}

ボタンは doLogin アクションにリンクされており、(ポップオーバー内で) 正常に動作します。内部にはいくつかのロジックがあり、うまく機能します。

メイン ビュー ヘッダー ファイル (A)

#import <UIKit/UIKit.h>
#import "login.h"

@interface ViewController : UIViewController <UIPopoverControllerDelegate, MyPopoverDelegate> {
   UIPopoverController *myPopoverController;
}

@property (nonatomic, retain) UIPopoverController *myPopoverController;
....
..

@end

メイン ビュー実装ファイル (A)

@synthesize delegate;
..
...

- (void) didLoginButton {
    if ([myPopoverController isPopoverVisible]) {
         NSLog(@"dismiss ok");

         [myPopoverController dismissPopoverAnimated:YES];
     }
}

....
..

私のコードを実行し、メインビューからログインボタンを押すと、ポップオーバーが表示されます。ポップオーバー内のボタンを押しても何も起こりません。

基本的に、メイン ビュー ファイルに設定した didLoginButton メソッドは決してトリガーされず、もちろん、ポップオーバーは常に表示されます。私が間違っていることは何ですか?

4

1 に答える 1

1

デリゲートを設定する

 BViewController.delegate = mainAViewController; //or self

ポップオーバーを表示する前に。これが問題でない場合は、B の作成とプレゼンテーションからコードを提供してください。

于 2012-11-23T15:12:47.017 に答える