UITopViewConll上的UIPopoverController

时间:2012-05-20 14:51:58

标签: iphone objective-c ios uitableview uipopovercontroller

我有一个UITableView单元格,里面有几个UITextField个。当用户单击其中一个textField时,会出现带有一些信息的弹出窗口。首先,他们必须在textField或popover之外单击以清除弹出窗口,然后单击下一个textField。因此,我将单元格的contentView添加到弹出控制器的passThroughViews属性中,这样他们就可以随意点击该单元格中的不同textFields,而无需先关闭弹出控制器。但是,它保持原始弹出窗口打开(哪个)很好,然后打开另一个相同的弹出窗口。

在发送命令打开另一个命令之前,有没有办法告诉popover是否已打开?我想不出怎么检测到这个?

2 个答案:

答案 0 :(得分:2)

如果每个单元格控制弹出窗口的逻辑,则需要向自定义单元格说明实现UIPopoverControllerDelegate协议,将弹出窗口的委托设置为self(单元格)并覆盖{{ 1}}如下:

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代码)。由于 bbum 建议您不要使用retainCount来检查对象是否存在。

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

答案 1 :(得分:0)

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

我将视图控制器设为UIPopoverControllerDelegate

然后我创建了一个名为BOOL的{​​{1}}。

当我创建我的popover时,我将myPopoverControllerOpen设置为yes。使用委托方法BOOL,然后我将popoverDidDismissPopover设置回BOOL

然后在呈现弹出窗口之前检查此NO的状态。