UIPopover按钮重复动作

时间:2012-11-26 19:44:31

标签: xcode uipopovercontroller uistoryboard

我正在使用UIPopover为iPad创建应用程序。我有一个主视图,我从中调用两个显示不同信息的popovers。我遵循How to Dismiss a Storyboard Popover线程和另一个线程中的指导原则,一切正常,除了一件事。在我的popover中,我有一个按钮,可以触发父视图上的操作。有时不止一次触发动作,即使按钮只被单击一次,弹出也只打开一次。我的第一个假设是,popover正在缓存来自多个调用的一些数据,但问题似乎只是随机出现。

我的配置是:带有Xcode 4.2,iOS 5.0的Mac OSx Snow Leopard。 在模拟器,iPad 5.1和iPad 6.0中测试了相同的结果。

我有主视图查看1 和弹出视图查看2

在我看来2我有一个方法ProceedButtonClicked,它将通知发送到View 1

- (IBAction) ProceedButtonClicked{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"proceedButtonClicked" object:self];
}

该方法绑定到弹出窗口视图中的按钮。 在view1(父视图)中:

- (void)viewDidLoad
{
    [super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self   selector:@selector(ButtonClicked:) name:@"proceedButtonClicked" object:nil];
}

- (void) ButtonClicked:(NSNotification *) notification {
NSLog(@"I'm here ...");
//dismiss popover
if (paramPopover)
    [paramPopover dismissPopoverAnimated:YES];
}

我对iPad的开发还很陌生,所以也许我的代码中缺少一些显而易见的东西,但直到现在才进行搜索。 任何帮助,将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:0)

当使用通知时,你冒着同一通知的多个类实例的风险,所以如果你因为某些原因有2个控制器活着(内存管理不好?),那么按下按钮时2个控制器将接听电话,你将会有重复的行动。

按钮可以为它们分配特定的回调,并且通过代码设置它非常简单:

如果您的按钮是UIButton,您可以像这样设置目标操作:

[button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];

如果您的按钮是UIBarButtonItem,则在创建时设置目标

[[UIBarButtonItem alloc] initWithTitle:@"Title" style:UIBarButtonItemStyleBordered target:self action:@selector(buttonAction:)];

编辑:

NSLog(@"I'm here ..."); 那令人毛骨悚然......