2012-11-23 56 views
0

我寫了一些代碼來隱藏彈出按鈕,但按下按鈕但它不起作用(沒有新增功能)。 我有一個主視圖(我將它稱爲A)與一個按鈕裏面,按下按鈕彈出顯示(我將它稱爲B)。彈出式窗口中有另一個按鈕,我想用它來關閉彈出窗口並在A中執行某些操作。換句話說,A是我的主視圖,按下按鈕我顯示一個彈出窗口(B)執行登錄(憑據可以是填寫)。使用按鈕關閉彈出窗口並委託執行

按下登錄按鈕(彈出窗口中的那個)我調用一個服務來檢查憑證,如果用戶已通過身份驗證,則需要關閉彈出窗口並更新我的主視圖(A)。

下面是我的代碼

按鈕與doLogin動作鏈接酥料餅的頭文件(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]; 
} 

,它工作正常(在popover內)。我內部有一些邏輯,它運作良好。

主視圖頭文件(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]; 
    } 
} 

.... 
.. 

運行我的代碼並按下登錄按鈕形成出現的酥料餅的主視圖。按下popover中的按鈕什麼也沒有發生。

基本上,我已經設置到我的主視圖文件中的didLoginButton方法永遠不會被觸發,當然,彈出窗口總是可見的。 我做錯了什麼?

回答

1

設置委託

BViewController.delegate = mainAViewController; //or self 

呈現酥料餅之前。 如果這不是您的問題,請提供您的B創建和演示文稿中的一些代碼。

+0

我使用在我的storybpard中定義的segue顯示popover。不知道我該如何設置我的代表,所以......我認爲你是對的。我沒有在我的B視圖(實際上是彈窗視圖)中設置委託。 在我的主視圖我已經添加的方法prepareForSegue如下 - (無效)prepareForSegue:(UIStoryboardSegue *)賽格瑞發件人:(ID)發送方{ 如果([segue.identifier isEqualToString:@ 「登錄」]){ ((UIStoryboardPopoverSegue *)segue).popoverController.delegate = self; } } 我檢查標識符是否與我在故事板中設置的標識符相同的「登錄」。 –

+0

這段代碼仍然沒有解決問題... –

+0

我不知道它應該如何與故事板一起工作。我不使用故事板。 – Dave