【问题标题】:How to enable touch outside when PopOverView open?PopOverView 打开时如何启用外部触摸?
【发布时间】:2015-03-25 19:41:22
【问题描述】:

我在我的应用中使用 popover。我想在 popoverview 打开时启用外部触摸。现在,当我单击 popoverview 的外部时,我无法触摸 popoverview 的外部,它会消失。

这是我想要做的屏幕截图。我在情节提要中使用 popoversegue。

我该如何解决这个问题?

感谢您的帮助。

【问题讨论】:

    标签: ios segue uipopover


    【解决方案1】:

    以下是使用 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)
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用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;
      }
      

      【讨论】:

      • thanks.it 会做我的事情,但我没有 popovercontroller 类。我用popoversegue。如何将此代码导入我的项目。
      • @fozoglu:在为 segue 做准备时,你可以得到它: UIPopoverController* popover = [(UIStoryboardPopoverSegue*)segue popoverController];
      • 我得到一个错误 viewToEnableTouch -> 使用未声明的标识符
      • @fozoglu:这是我输入的虚拟值。你需要把你的实际视图放在那里(比如 self.view)
      • 对不起。我很迷惑。我创建简单的项目。我在情节提要中添加了两个按钮,只有一个按钮连接 popoversegue。我创建了两个 UIViewController 类第一个 ViewController 第二个 MyPopoverController。在 ViewController 中导入 MyPopoverController 到这里该怎么办?
      猜你喜欢
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 2020-09-23
      • 2020-05-06
      • 2020-08-03
      • 2022-06-15
      相关资源
      最近更新 更多