Menus have been a part of iOS since iOS 3. They're those little black bubbles that often contain copy/paste/etc options.
They're great for offering more intermediate or advanced features right in-context over the content they'll manipulate.
Today we'll take a look at the basics of getting them working in our own view controllers. Let's get started:
First we'll add a function for when our menu item is selected:
class SpaceshipsViewController : UIViewController {
func copySpaceship() {
// do the thing
}
}
Then we'll need to override a couple of functions:
extension SpaceshipsViewController {
override func canBecomeFirstResponder() -> Bool {
return true
}
override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
switch action {
case Selector("copySpaceship"): return true
default: return false
}
}
}
Next, we'll need to actually show our menu. There are plenty of ways to do this, but one common technique is a long press gesture recognizer:
view.addGestureRecognizer(
UILongPressGestureRecognizer(
target: self,
action: Selector("showMenu")
)
)
Finally, we'll implement our showMenu
function:
func showMenu() {
becomeFirstResponder()
let menu = UIMenuController.sharedMenuController()
menu.menuItems = [UIMenuItem(title: "Copy", action: Selector("copySpaceship"))]
menu.setTargetRect(view.bounds, inView: view)
menu.setMenuVisible(true, animated: true)
}
Success!