ios - 来自任意 anchor 的弹出窗口 - Swift

标签 ios swift popover

我想通过像这样的图片的按钮制作一个弹出窗口:

enter image description here

为此,我按照以下步骤操作:

1.我创建了一个 View Controller (加上一个 Controller )并将其大小更改为100*200

2.我从第一个 Controller (JobsViewController)到上面的 Controller 作为呈现为弹出框,并设置一个标识符:

enter image description here

3.在JobsViewController中:

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "showFeatureJobs" {

        //let popoverViewController = segue.destination
        // popoverViewController.modalPresentationStyle = UIModalPresentationStyle.popover
        // popoverViewController.popoverPresentationController!.delegate = self

        // get a reference to the view controller for the popover
        let popController = UIStoryboard(name: "JobsViewController", bundle: nil).instantiateViewController(withIdentifier: "showFeatureJobs")

        // set the presentation style
        popController.modalPresentationStyle = UIModalPresentationStyle.popover

        // set up the popover presentation controller
        popController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.up
        popController.popoverPresentationController?.delegate = self
        popController.popoverPresentationController?.sourceView = sender as! UIView? // button
        popController.popoverPresentationController?.sourceRect = (sender?.bounds)!

        // present the popover
        self.present(popController, animated: true, completion: nil)

    }
}

// MARK: - UIPopoverPresentationControllerDelegate method

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {

    // Force popover style
    return UIModalPresentationStyle.none
}

4.但是当我单击按钮时,我的弹出窗口覆盖了我的所有页面:

enter image description here

我的问题出在哪里?

最佳答案

弹出窗口 Controller 应该已经由 Storyboard序列实例化。您需要使用已有的(且大小合适)而不是创建一个新的。

类似于:

  if let popOver = segue?.destination.popoverPresentationController,
  { popOver.sourceRect = yourAnchor.bounds }   

我不确定你是如何获得 AnyObject 类型的 sender 参数的?有一个 .bounds 属性用作 sourceRect,因此我必须假设您在实际运行的代码中的其他位置获得了一些适合动态 anchor 位置的坐标。

关于ios - 来自任意 anchor 的弹出窗口 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42547396/

相关文章:

在后台运行的 IOS 5 应用程序在 4 天后终止

ios - 如何以编程方式将 UIBarButtonItem 添加到我的导航 Controller ?

javascript - 如何在鼠标单击位置打开弹出窗口

ios - 我如何在自己的应用程序中共享Safari这样的网址

ios - 导致 textview 隐藏的约束

ios - `String(describing: MyNSObject.self)` 总是返回 "MyNSObject"吗?

swift - 在 Swift 3 中很好地显示 JSON 数据

ios - Quickblox Profile Pic问题 swift

javascript - Bootstrap popover 对于多个位置只有一次

javascript - 使用 Bootstrap 弹出窗口作为模式