Popover 图片库在 iPad iOS Swift 中不起作用

Popover image gallery not working in iPad iOS Swift

最近我的应用被应用审核拒绝了,因为我没有使用 Popover。 然后我将编码更改为以下内容。但我仍然没有在模拟器中弹出 window。

总是变得正常 iPhone 照片选择方法,它使应用程序崩溃。

它甚至不打印 "working"。

 @IBAction func chooseGallery(sender: UIBarButtonItem) {

    imagePicker.sourceType = .PhotoLibrary

  //imagePicker.modalPresentationStyle = .Popover
  //presentViewController(imagePicker, animated: true, completion: nil)//4
  //imagePicker.popoverPresentationController?.barButtonItem = sender

    if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
        self.presentViewController(imagePicker, animated: true, completion: nil)
    }
    else {
        println("Working")// to test this part

        imagePicker.modalPresentationStyle = .Popover
        presentViewController(imagePicker, animated: true, completion: nil)//4
        imagePicker.popoverPresentationController?.barButtonItem = (sender)

        imagePicker.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.Up
        imagePicker.popoverPresentationController?.sourceRect = CGRect(x: 150, y: 150, width: 0, height: 0)
     }     
}

您的代码经过一些修改对我来说工作正常,在下面的示例中,我将像您一样只为 iPad 显示一个 Popover。

@IBAction func showNextViewController(sender: UIBarButtonItem) {

    let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
    let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("NextViewController") as! NexViewController

    if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
        self.presentViewController(nextViewController, animated: true, completion: nil)
    }
    else {            
        nextViewController.modalPresentationStyle = .Popover
        presentViewController(nextViewController, animated: true, completion: nil)

        if let popover = nextViewController.popoverPresentationController {             
            popover.barButtonItem = sender
            popover.permittedArrowDirections = UIPopoverArrowDirection.Up

            // to set it size
            nextViewController.preferredContentSize = CGSizeMake(200,500)
        }
    }    
}

因为我不知道 UIViewController 的 class 你想展示的是我自己做了一个,里面什么都没有,我在 @IBAction 中实例化了它避免保留对它的引用(仅用于测试目的)。

只是一些观察:

  • 当您要显示弹出窗口时,您只需设置以下两个选项之一:

    • barButtonItem
    • sourceViewsourceRect

在上面的例子中就像你设置了 barButtonItem 你不需要更多的东西。

希望对你有所帮助。

试试这个,

picker.modalPresentationStyle = .CurrentContext