【问题标题】:popover close from another view controller swift 3从另一个视图控制器弹出窗口关闭 swift 3
【发布时间】:2017-05-01 12:58:39
【问题描述】:

我使用 Xcode 8 和 swift 3。 我有一个带有按钮的视图控制器(类用户:NSViewcontroller)。 这个按钮有一个动作:

@IBAction func btnAction(_ sender: Any) {

  let popover = NSPopover()
  popover.contentViewController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: "Popover") as! NSViewController

  popover.show(relativeTo: button.bunds ,  of: button, preferredEdge: .maxX)
}

这个按钮打开另一个视图控制器作为弹出框。 这个弹出视图控制器(Class Popover:NSViewController)做一些动作。

现在我的问题是:如何从弹出框类中关闭弹出框视图控制器?

【问题讨论】:

标签: swift3 xcode8


【解决方案1】:

不确定上面的代码,但为了创建您的 PopoverView 并将其关闭。以下是步骤:-

1) 创建一个新的 View Controller 名称为 PopOverViewController.swift

2) 在其中实现以下方法:-

func updatePopOverViewController(_ button: UIButton?, with delegate: AnyObject?) {

    guard let button = button else { return }

    modalPresentationStyle = .popover

    popoverPresentationController?.permittedArrowDirections = [.up]

    popoverPresentationController?.backgroundColor = view.backgroundColor

    popoverPresentationController?.sourceView = button

    popoverPresentationController?.sourceRect = button.bounds

    popoverPresentationController?.delegate = OtherViewControllerClass
}

3) 在您的 OtherViewControllerClass 中实现以下代码:-

extension OtherViewControllerClass: UIPopoverPresentationControllerDelegate {

func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {

    return UIModalPresentationStyle.none
}


func popoverPresentationControllerDidDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) {
    //your code for eg. if you want to change the tint color of our button
}

 //When you tap on button it will show the popover and while tapping on yourViewcontroller view it will dismiss the popover accordingly.
@IBAction func buttonClicked(_ sender: UIButton) {

    let viewController = PopOverViewController()

    viewController.updatePopOverViewController(sender, with: self)

   present(viewController, animated: true, completion: nil)
  }
}

【讨论】:

【解决方案2】:

好吧,我可能完全猜对了,因为我不知道您的 ViewController 是如何编写的,但这应该可以正常工作

self.presentedViewController?.dismiss(animated: true, completion: nil)

这里的基本内容是您可以访问呈现弹出框的 VC,然后对其调用关闭。

【讨论】:

    猜你喜欢
    • 2020-06-21
    • 2017-02-04
    • 2019-04-14
    • 2015-08-16
    • 2013-05-14
    • 1970-01-01
    • 2012-03-13
    • 2018-08-13
    • 2013-07-25
    相关资源
    最近更新 更多