Latest 0.2.6
License MIT
Platforms ios 9.0
Frameworks UIKit

CI Status
GitHub issues

Dead Simpe Dropdown Menu

A simple drop-down menu written in Swift.



  • Automatically update menu button content based on selected cell
  • Use delegate or configuration closure to setup menu
  • Use default or custom menu cells (with and without NIBs)
  • Create menu programmatically or in the Interface Builder


  • iOS 9.0+
  • Xcode 9.0+
  • Swift 4.0+


To run the example project, clone the repo, and run pod install from the Example directory first.


DSDMenu is available via CocoaPods.

CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. You can install it with the following command:

$ sudo gem install cocoapods

To integrate DSDMenu, simply add the following line to your Podfile:

pod 'DSDMenu'

Then, run the following command:

pod install



  1. Programmatically:

    Use convenience initializer:

    init(title: String, frame: CGRect =
  2. Using Interface Builder

    Place a UIButton object on the storyboard and change custom class as pictured below:

    Interface Builder setup

Customize menu behaviour:

DSDMenu can be customized and controlled using two ways (mutually exclusive!):

  1. Using delegete (old-way):

    Confrom to DropDownDelegate protocol and assign delegate:

    1. Programmatically:

      menu.delegate = self
    2. Using Interface Builder:

      Interface Builder delegate

  2. Using configuration closure (new-way):

    Instantiate menu instance, then pass closure with a DropDownMenuConfigurator instance inside, configured within this closure, to the configure(using: (DropDownMenuConfigurator) -> Void) method:

    menu.configure { configurator in
                  .didSelectItem { index in print(index) }
                  .willDisplayCell { (cell, index) in print(cell, index) }

API reference:

Delegate method Configuration method equivalent Description
numberOfItems(in:) numberOfItems(_:) Asks the delegate for the number of items in menu
cellClass(for:) cellClass(_:) Asks the delegate for the cell class used in menu
dropDownMenu(_:didSelectItemAt:) didSelectItem(_:) Tells the delegate that the item in the menu was tapped
dropDownMenu(_:willDisplay:forRowAt:) willDisplayCell(_:) Tells the delegate that the cell in the menu is about to be displayed
updateThumbnailOnSelection(in:) updateThumbnailOnSelection(_:) Asks the delegate whether the menu should update thumbnail image automatically on selection

TODO Section

  • [x] Configure using closure instead of delegate
  • [x] Auto-update view based on selected cell’s content
  • [x] Setup constraints in updateConstraints() (see also)
  • [x] Setup Pod
  • [x] Complete README
  • [ ] Correct handling of orientation changes when updateThumbnailOnSelection = true
  • [ ] Use POP for cells instead subclassing (if possible?)
  • [ ] Allow to customize menu’s appearance (shadows, colors, etc)
  • [ ] Unit and UI tests
  • [ ] Rx extension


Contributing is always welcomed, just follow these steps:

  1. Fork
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

That’s it!




DSDMenu is released under an MIT license. See LICENSE for more information.

Latest podspec

    "name": "DSDMenu",
    "version": "0.2.6",
    "summary": "A dead-simpe, UIkit-based dropdown menu, written in Swift",
    "description": "This pod allows you to use subclass of the UIButton UIKit class, DropDownMenu, to create beautiful and customizable drop-down menus.",
    "homepage": "",
    "screenshots": [
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    "authors": {
        "m3g0byt3": "[email protected]"
    "source": {
        "git": "",
        "tag": "0.2.6"
    "platforms": {
        "ios": "9.0"
    "swift_version": "4.0",
    "source_files": "Source/**/*",
    "frameworks": "UIKit"

Pin It on Pinterest

Share This