2012-11-23 58 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