我目前有一个带有UIToolbar的iPad应用程序,其中包含两个UIBarButtonItems,每个都连接到一个popover segue。
当用户触摸任一UIBarButtonItems时,都会创建弹出窗口,而不是切换。这会创建多个重叠的弹出画面。我已经能够使用以下代码关闭之前创建的弹出窗口
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// First close the preferences popover if it's open per Apple guidelines
if ([self.popoverA.popoverController isPopoverVisible]) {
[self.popoverA.popoverController dismissPopoverAnimated:YES];
}
if ([self.popoverB.popoverController isPopoverVisible]) {
[self.popoverB.popoverController dismissPopoverAnimated:YES];
}
... code to manage segues ...
}我也有UIButtons,它创建的弹出式segues的行为正常。由于与UIBarButtonItems关联的弹出窗口的这种行为,我的应用程序被拒绝。有人对具有多个UIBarButtonItems的UIToolbar有任何正确工作的建议或代码示例吗?当用户触摸窗口外时弹出窗口不会出现,
发布于 2011-12-22 10:18:43
当您在-prepareForSegue:sender:中收到消息时,取消段已为时已晚。
为了有效地做到这一点,您应该从视图控制器本身而不是栏按钮创建到弹出窗口的segues,以便它们仍然可以通过编程方式执行。现在,将UIBarButtonItem连接到一些方法,这些方法将有条件地呈现或关闭弹出窗口。
- (IBAction)showPopoverA
{
if (self.popoverA.popoverController.popoverVisible)
[self.popoverA.popoverController dismissPopoverAnimated:YES];
[self performSegueWithIdentifier:@"ShowPopoverA"];
}发布于 2012-12-18 05:28:07
这是做你需要做的事情的正确方法:
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
if ([identifier isEqualToString:@"SurveyListPopover"]) {
if (self.surveyListPopover == nil) {
return YES;
}
return NO;
}
return YES;
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"SurveyListPopover"]) {
// Assign popover instance so we can dismiss it later
self.surveyListPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
}
}这确保了如果已经显示了弹出窗口的实例,段将被取消。你只需要确保你的popover对象在故事板中有一个标识符。
发布于 2013-08-09 23:56:26
两者的结合为我带来了成功
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"showPopover"]) {
self.tableOfContentsPopoverController = [(UIStoryboardPopoverSegue*)segue popoverController];
}
}
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
if ([identifier isEqualToString:@"showPopover"]) {
if (!self.tableOfContentsPopoverController.popoverVisible) {
return YES;
}
return NO;
}
return YES;
}https://stackoverflow.com/questions/8598557
复制相似问题