1

我正在使用 UIPopover 为 iPad 创建应用程序。我有一个主视图,我从中调用两个显示不同信息的弹出框。我遵循如何关闭 Storyboard Popover线程和另一个线程中的指导方针,除了一件事,一切正常。在我的弹出窗口中,我有一个按钮可以触发父视图上的操作。即使仅单击一次按钮并且仅打开了一次弹出窗口,有时也会多次触发该操作。我的第一个假设是弹出框正在缓存来自多个调用的一些数据,但问题似乎只是随机出现的。

我的配置是:Mac OSx Snow Leopard with Xcode 4.2, iOS 5.0。在模拟器中测试,iPad 5.1 和 iPad 6.0 的结果都一样。

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

在我的视图 2 中,我有一个方法 ProceedButtonClicked,它将通知发送到视图 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 开发还很陌生,所以也许我的代码中缺少一些明显的东西,但到目前为止搜索结果一无所获。任何帮助,将不胜感激。谢谢你。

4

1 回答 1

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 ..."); 太吓人了 ...

于 2012-11-26T19:52:33.873 回答