如何在PopOverView打开时启用外部触摸?

时间:2015-01-27 08:43:29

标签: ios segue uipopover

我正在使用popover和我的应用程序。我想在popoverview打开时启用外部触摸功能。现在,当我点击popoverview的外部时,我无法触摸popoverview之外,它就消失了。

这是我想要做的屏幕截图。我在故事板中使用popoversegue。

我该怎么办?

感谢您的帮助。

enter image description here

2 个答案:

答案 0 :(得分:3)

您可以使用passthroughViews来实现相同目标。

yourPopoverController.passthroughViews = [NSArray arrayWithObjects:viewToEnableTouch, nil];
  

passthroughViews 财产

     

用户可以在弹出框中与之交互的视图数组   可见。声明

     

<强>夫特

     

var passthroughViews: [AnyObject]?

     

<强>目标C

     

@property(nonatomic, copy) NSArray *passthroughViews

     

<强>讨论

     

当弹出窗口处于活动状态时,通常会与其他视图进行交互   禁用直到弹出被解雇。分配视图数组   到这个属性允许处理弹出窗口外的水龙头   相应的观点。进口声明

     

导入UIKit

     

<强>状况

     

适用于iOS 3.2及更高版本。

参考UIPopoverController Class Reference


如果您不希望在用户点击外部时忽略popover,那么您可以通过以下方式实现此目的:

- (BOOL) popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
{
    return NO;
}

答案 1 :(得分:2)

以下是使用SWIFT对我有用的内容。它将允许您与&#34; doneBtn&#34;以及#34; myMap&#34;。

@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)
}