简体   繁体   English

UIPopoverPresentationController Swift

[英]UIPopoverPresentationController Swift

I'm using Storyboards and AutoLayout. 我正在使用Storyboard和AutoLayout。 There are 2 scenes, 1 is my main view controller with a toolbar and several UIBarButtonItems and 1 is a UIViewController that should simply display a UILabel. 有2个场景,1个是我的主视图控制器,带有一个工具栏和几个UIBarButtonItems,1个是应该仅显示UILabel的UIViewController。 When the user taps a toolbar in my main view controller, I present the popover with the following code: 当用户点击主视图控制器中的工具栏时,我将使用以下代码显示弹出窗口:

func presentPopover(viewCtrl: UIViewController, item: UIBarButtonItem) {
viewCtrl.modalPresentationStyle = .Popover
let popover: UIPopoverPresentationController = viewCtrl.popoverPresentationController!
popover.permittedArrowDirections = .Any
popover.barButtonItem = item
self.presentViewController(viewCtrl, animated: true, completion: nil)
}

helpView = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("HelpView“) as? HelpVC
if helpView != nil {
    presentPopover(helpView!, helpButton)
}

The view gets presented but no subviews (UILabel) are visible. 视图被呈现,但是没有子视图(UILabel)可见。 The same strange behaviour happens, when I setup storyboard segues instead of doing the popover presentation from code. 当我设置情节提要剧集而不是通过代码进行弹出窗口演示时,也会发生同样的奇怪行为。 However, when I push the very same view on my UINavigationController everything gets displayed fine. 但是,当我在UINavigationController上推送完全相同的视图时,一切都会很好地显示。 Am I missing something? 我想念什么吗?

Best Regards, Oliver 最好的问候,奥利弗

Adjust the sizes to what you want. 将尺寸调整为所需的尺寸。 You can set the barbutton instead of the sourceView if you pass that in. 如果传入,则可以设置barbutton而不是sourceView。

    if let controller = viewCtrl {
        controller.preferredContentSize = CGSizeMake(200,25)
        controller.modalPresentationStyle = UIModalPresentationStyle.Popover
        if let popover = controller.popoverPresentationController  {
            popover.delegate = self
            popover.sourceView = viewCtrl.view
            popover.sourceRect = CGRectMake(0,-5, 50, 50)
            popover.permittedArrowDirections = .Any
            self.presentViewController(controller, animated: true, completion: nil)
        }
    }

For best tutorial click here 有关最佳教程, 请单击此处

  • create one XIB and swift file for popup menu . 创建一个XIB和快捷文件的弹出菜单。 (ex. MenuViewController) (例如MenuViewController)
  • create another xib or storyboard view controller file for display popup menu . 创建另一个xib或Storyboard视图控制器文件以显示弹出菜单。 (ex. ViewController) (例如ViewController)
  • in viewController file add UIPopoverPresentationControllerDelegate 在viewController文件中添加UIPopoverPresentationControllerDelegate
  • add button in ViewController and create IBAction and write bellow code. 在ViewController中添加按钮并创建IBAction并编写下面的代码。

@IBAction func onClickMenu(_ sender: UIButton)
    {
        if btnMenu.isSelected
        {
            btnMenu.setImage(UIImage(named: "arrow_orange"), for: UIControlState.normal)

            btnMenu.isSelected = false

            self.dismiss(animated: true, completion: nil)
        }
        else
        {
            btnMenu.setImage(UIImage(named: "up_arrow_orange"), for: UIControlState.normal)

            btnMenu.isSelected = true

            let popMenu = MenuViewController(nibName: "MenuViewController", bundle: nil)
            popMenu.modalPresentationStyle = UIModalPresentationStyle.popover

            popMenu.preferredContentSize = CGSize.init(width: 320, height: 265)

            popMenu.vcPush = self

            self.present(popMenu, animated: true, completion: nil)

            let popController :  UIPopoverPresentationController = popMenu.popoverPresentationController!

            popController.permittedArrowDirections = UIPopoverArrowDirection.up

            popController.delegate = self

            //popController?.barButtonItem = nil

            popController.sourceView = self.view

            popController.sourceRect = CGRect.init(x: 525, y: 30, width: 10, height: 10)
        }
    }

For best tutorial click here 有关最佳教程, 请单击此处

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM