我正在使用a UIStoryboardPopoverSegue来为iOS 5 iPad应用程序提供popover.Segue工作得很好,但似乎包含按钮的工具栏是popover控制器的直通视图,所以如果你继续按下按钮,会出现更多的弹出窗口.由于我没有创建和跟踪UIPopoverController自己(正如故事板正在做的那样),当再次触摸按钮时我无法忽略它.有没有其他人遇到这个?我有一个与Apple打开的错误,但他们没有回应.
编辑:我已经使用下面的答案解决了这个问题.这是我最终使用的代码.在我的视图控制器类中currentPopover是一个__weakivar,所以当控制器完成后,它将自动降为零.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue isKindOfClass:[UIStoryboardPopoverSegue class]]){
// Dismiss current popover, set new popover
[currentPopover dismissPopoverAnimated:YES];
currentPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
您的解决方案Cory存在一些视觉问题.
可以考虑两个选项 - 只需删除或更改显示弹出窗口的按钮的操作.
选项1,按住指针按钮的动作,并在弹出窗口后,将动作设置为零.一旦解除弹出重置为原始动作.
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
action = [sender action];
[sender setAction:nil];
self.currentPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
self.currentPopover.delegate = self;
}
-(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
{
[self.navigationItem.rightBarButtonItem setAction:action];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
这样,popover只能出现一次,并将按预期被解雇.
第二个选项是更改按钮的功能,以便当弹出窗口可见时,点击按钮将导致弹出窗口被解除.
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
action = [sender action];
target = [sender target];
[sender setTarget:self];
[sender setAction:@selector(dismiss:)];
self.currentPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
self.currentPopover.delegate = self;
}
-(void)dismiss:(id)sender
{
[self.navigationItem.rightBarButtonItem setAction:action];
[self.navigationItem.rightBarButtonItem setTarget:target];
////or
// [sender setAction:action];
// [sender setTarget:target];
[self.currentPopover dismissPopoverAnimated:YES];
}
-(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
{
[self.navigationItem.rightBarButtonItem setAction:action];
[self.navigationItem.rightBarButtonItem setTarget:target];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
您必须在类方法中存储对popoverController作为类的一部分传递的属性的引用。 UIStoryboardPopoverSegueprepareForSegue
要访问它,请重写调用视图控制器中的方法,如下所示:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// The Storyboard Segue is named popover in this case:
if ([segue.identifier compare:@"popover"] == NSOrderedSame) {
// segue.popoverController is only present in popover segue's
// self.seguePopoverController is a UIPopoverController * property.
self.seguePopoverController = segue.popoverController;
}
}
Run Code Online (Sandbox Code Playgroud)
然后您可以按照通常的方式将其关闭。
| 归档时间: |
|
| 查看次数: |
9704 次 |
| 最近记录: |