# BTNavigationDropdownMenu **Repository Path**: gentlemanwang/BTNavigationDropdownMenu ## Basic Information - **Project Name**: BTNavigationDropdownMenu - **Description**: 导航栏标题菜单 - **Primary Language**: Swift - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-05-23 - **Last Updated**: 2024-08-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ![alt tag](https://github.com/PhamBaTho/BTNavigationDropdownMenu/blob/master/Assets/BTNavigationDropdownLogo.png) [![Pod Version](https://img.shields.io/cocoapods/v/BTNavigationDropdownMenu.svg?style=flat)](http://cocoadocs.org/docsets/BTNavigationDropdownMenu/) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://github.com/PhamBaTho/BTNavigationDropdownMenu/blob/master/LICENSE) ![Language](https://img.shields.io/badge/language-Swift-brightgreen.svg?style=flat) ## Introduction The elegant yet functional dropdown menu, written in Swift, appears underneath the navigation bar to display a list of defined items when a user clicks on the navigation title. ![alt tag](https://github.com/PhamBaTho/BTNavigationDropdownMenu/blob/master/Assets/Demo.gif) ## Installation ### CocoaPods **BTNavigationDropdownMenu** is available through [CocoaPods](http://cocoapods.org). To install it, simply add the following line to your Podfile: ```ruby use_frameworks! pod 'BTNavigationDropdownMenu' ``` Go ahead and **import** BTNavigationDropdownMenu into your own Swift files ```swift import BTNavigationDropdownMenu ``` ## Carthage [Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. You can install Carthage with [Homebrew](https://brew.sh/) using the following command: ```bash $ brew update $ brew install carthage ``` To integrate BTNavigationDropdownMenu into your Xcode project using Carthage, specify it in your `Cartfile`: ```ogdl github "PhamBaTho/BTNavigationDropdownMenu" ~> 0.7 ``` Run `carthage update` to build the framework and drag the built `BTNavigationDropdownMenu.framework` into your Xcode project. ## Usage ### Instantiate Start by creating an Array that contains strings as **elements of a dropdown list**: ```swift let items = ["Most Popular", "Latest", "Trending", "Nearest", "Top Picks"] ``` Create a **new instance** of BTNavigationDropdownMenu: ```swift let menuView = BTNavigationDropdownMenu(navigationController: self.navigationController, containerView: self.navigationController!.view, title: BTTitle.title("Dropdown Menu"), items: items) ``` or like this: ```swift let menuView = BTNavigationDropdownMenu(title: BTTitle.index(1), items: items) ``` BTTitle is an enum. We can set `BTTitle.title(string)` or `BTTitle.index(Int)` (Note: `BTTitle.index` is the index of defined `items` array). By default, `navigationController` is the topmost navigation controller and `containerView` is keyWindow. (`keyWindow` is recommended for `containerView` so that the black overlay can cover the whole screen. In some cases, `keyWindow` doesn't work properly, like using with side menu (e.g. SWRevealViewController), the dropdown menu doesn't move along with the parent view or navigation controller. To workaround this issue, you can use `self.navigationController!.view`.) Set **title of navigation bar** as menuView: ```swift self.navigationItem.titleView = menuView ``` Call BTNavigationDropdownMenu closure to get **the index of selected cell**: ```swift menuView.didSelectItemAtIndexHandler = {[weak self] (indexPath: Int) -> () in print("Did select item at index: \(indexPath)") self.selectedCellLabel.text = items[indexPath] } ``` `menuView.show()` or `menuView.hide()` to show or hide dropdown menu manually. `menuView.toggle()` to toogle dropdown menu shown/hide. `menuView.isShown` (Boolean type) property to check showing state of dropdown menu. `menuView.updateItems(items: [AnyObject])` to update items in dropdown menu. ### Customization First, assign the items and frame for the dropdown menu. Then, customize the look and feel of the menu by overriding these properties: | Name | Description | Default value | |---|---|:---:| | `navigationBarTitleFont` | Navigation bar title font | System font, bold, size 17 | | `cellHeight` | Cell height | 50 | | `arrowImage` | Arrow next to the navigation title | Provided image | | `arrowPadding` | Padding between the navigation title and arrow | 15 | | `cellBackgroundColor` | Cell background color | UIColor.white | | `cellSeparatorColor` | Cell separator color | UIColor.darkGray | | `cellTextLabelColor` | Text color inside of the cell | UIColor.darkGray | | `cellTextLabelFont` | Text font inside the cell | System font, bold, size 17 | | `cellTextLabelAlignment` | Text alignment inside of the cell | NSTextAlignment.left | | `cellSelectionColor` | Selected color of the cell | UIColor.lightGray | | `checkMarkImage` | Checkmark icon for the cell | Provided image | | `animationDuration` | Animation duration for showing/hiding of the menu | 0.3 | | `maskBackgroundColor` | Mask layer color | UIColor.black | | `maskBackgroundOpacity` | Opacity of the mask layer | 0.3 | | `menuTitleColor` | Title color displayed in the menu | UIColor.lightGray | | `shouldKeepSelectedCellColor` | Selected cell color visibility when menu is shown | false | | `shouldChangeTitleText` | Ability to change the selected title text | true | | `selectedCellTextLabelColor` | Selected cell text label color | UIColor.darkGray | | `arrowTintColor` | Tint color of the arrow | UIColor.white | ## Requirement - iOS 9.0+ ## Changelog See the [CHANGELOG](https://github.com/PhamBaTho/BTNavigationDropdownMenu/blob/master/CHANGELOG.md) for details ## License BTNavigationDropdownMenu is available under the MIT License. See the [LICENSE](https://github.com/PhamBaTho/BTNavigationDropdownMenu/blob/master/LICENSE) for details.