I wish to create a small popover about 50x50px
from a UIButton
. I have seen methods using adaptive segue's but I have my size classes turn of thus meaning I can not use this features!
How else can I create this popover? Can I create it with code inside my button IBACtion
? Or is there still a way I can do this with storyboards?
You can do one of the following two options :
Create an action for the UIButton
in your UIViewController
and inside present the ViewController
you want like a Popover and your UIViewController
has to implement the protocol UIPopoverPresentationControllerDelegate
, take a look in the following code :
@IBAction func showPopover(sender: AnyObject) {
var popoverContent = self.storyboard?.instantiateViewControllerWithIdentifier("StoryboardIdentifier") as! UIViewController
popoverContent.modalPresentationStyle = .Popover
var popover = popoverContent.popoverPresentationController
if let popover = popoverContent.popoverPresentationController {
let viewForSource = sender as! UIView
popover.sourceView = viewForSource
// the position of the popover where it's showed
popover.sourceRect = viewForSource.bounds
// the size you want to display
popoverContent.preferredContentSize = CGSizeMake(200,500)
popover.delegate = self
}
self.presentViewController(popoverContent, animated: true, completion: nil)
}
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return .None
}
According to the book of @matt Programming iOS 8:
A popover presentation controller, in iOS 8, is a presentation controller (
UIPresentationController
), and presentation controllers are adaptive. This means that, by default, in a horizontally compact environment (i.e. on an iPhone), the.Popover
modal presentation style will be treated as.FullScreen
. What appears as a popover on the iPad will appear as a fullscreen presented view on the iPhone, completely replacing the interface.
To avoid this behavior in the iPhone you need to implement the delegate method adaptivePresentationStyleForPresentationController
inside your UIViewController
to display the Popover correctly.
The other way in my opinion is more easy to do, and is using Interface Builder, just arrange from the UIButton
to create a segue to the ViewController
you want and in the segue select the Popover
segue.
I hope this help you.