【发布时间】:2015-03-25 19:41:22
【问题描述】:
我在我的应用中使用 popover。我想在 popoverview 打开时启用外部触摸。现在,当我单击 popoverview 的外部时,我无法触摸 popoverview 的外部,它会消失。
这是我想要做的屏幕截图。我在情节提要中使用 popoversegue。
我该如何解决这个问题?
感谢您的帮助。
【问题讨论】:
我在我的应用中使用 popover。我想在 popoverview 打开时启用外部触摸。现在,当我单击 popoverview 的外部时,我无法触摸 popoverview 的外部,它会消失。
这是我想要做的屏幕截图。我在情节提要中使用 popoversegue。
我该如何解决这个问题?
感谢您的帮助。
【问题讨论】:
以下是使用 SWIFT 对我有用的方法。它将允许您与“doneBtn”以及“myMap”进行交互。
@IBOutlet weak var myMap: MKMapView!
func showPopover() {
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var popOverVC: popVC = storyboard.instantiateViewControllerWithIdentifier("popVC") as popVC
popOverVC.modalPresentationStyle = .Popover
popOverVC.preferredContentSize = CGSizeMake(self.myMap.frame.width, self.myMap.frame.height)
if let pop = popOverVC.popoverPresentationController {
var passthroughViews: [AnyObject]?
passthroughViews = [doneBtn, myMap]
pop.passthroughViews = NSMutableArray(array: passthroughViews!)
pop.permittedArrowDirections = .Any
pop.sourceView = myButton
pop.delegate = self
pop.sourceRect = CGRect(
x: 0,
y: 0,
width: 10,
height: 10)
}
self.presentViewController(
popOverVC,
animated: true,
completion: nil)
}
【讨论】:
您可以使用passthroughViews 来实现相同的目的。
yourPopoverController.passthroughViews = [NSArray arrayWithObjects:viewToEnableTouch, nil];
passthroughViews属性当弹出框出现时用户可以与之交互的一组视图 可见的。声明
斯威夫特
var passthroughViews: [AnyObject]?Objective-C
@property(nonatomic, copy) NSArray *passthroughViews讨论
当弹出框处于活动状态时,与其他视图的交互正常 禁用,直到弹出窗口被解除。分配视图数组 到这个属性允许在弹出框之外的点击由 对应的视图。进口声明
导入 UIKit
可用性
适用于 iOS 3.2 及更高版本。
参考UIPopoverController Class Reference
如果您不想在用户点击外部时关闭弹出框,那么您可以通过以下方式实现:
- (BOOL) popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
{
return NO;
}
【讨论】: