0

我有一个UITableView单元格,里面有几个UITextFields。当用户单击其中一个文本字段时,会出现一个包含一些信息的弹出框。起初,他们必须在文本字段或弹出框之外单击以清除弹出框,然后再单击下一个文本框。因此,我随后将单元格添加contentView到弹出框控制器的passThroughViews属性中,以便他们可以随意单击该单元格中的不同文本字段,而不必先关闭弹出框控制器。但是,它使原始弹出框保持打开(这很好),然后也打开另一个相同的弹出框。

有没有办法在发送打开另一个命令之前判断一个弹出窗口是否已经打开?我想不出如何检测这个?

4

2 回答 2

2

如果每个单元格都控制弹出框的逻辑,您需要告诉您的自定义单元格来实现UIPopoverControllerDelegate协议,将弹出框的委托设置为self(单元格)并覆盖popoverControllerDidDismissPopover如下:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
    [self.pop dismissPopoverAnimated:YES]; // hide the popover
    self.pop = nil; // release the popover, this forces to create a fresh popover each time
}

如果您愿意,您也可以删除该行self.pop = nil;,但请记住将其释放dealloc(我想您没有使用 ARC 代码,因为您正在使用retainCount)。正如bbum建议的那样,您不应该使用它retainCount来检查对象是否存在。

此外,如果您想查看弹出框是否已经可见,每个UIPopoverController实例都有一个名为的属性。popoverVisible

于 2012-05-20T15:11:37.973 回答
0

好的,我做到了。对于其他发现此问题的人。除了其他答案之外,这就是我的做法。

我把我的视图控制器做成了一个UIPopoverControllerDelegate.

然后我创建了一个BOOL名为myPopoverControllerOpen.

当我创建我的弹出框时,我将其设置BOOL为是。然后使用委托方法popoverDidDismissPopover将其设置BOOLNO.

BOOL然后我在呈现弹出框之前检查它的状态。

于 2012-05-20T15:19:43.827 回答