我正在使用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的开发还很陌生,所以也许我的代码中缺少一些显而易见的东西,但直到现在才进行搜索。 任何帮助,将不胜感激。 谢谢。
答案 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 ...");
那令人毛骨悚然......