iOS下的下拉菜單

功能

開發App時,常常須要根據不一樣條件顯示相應的數據。使用下拉菜單是一種很好的方案,包括一級菜單和二級菜單。git

如圖(來自愛飛揚旅遊App):

實現

該下拉菜單由兩部分組成。

一、一直顯示並能夠點擊的View1(FilterView),由UIButton組成。github

二、顯示下拉菜單的View2(PulldownMenu),由UITableView組成。有二級菜單時,則由兩個UITableView組成。segmentfault

事件部分:

一、點擊View1中的UIButton後,顯示View2。ide

二、點擊View2中的TableView的Cell後,更改對應的View1中UIButton的Title。經過設置代理,在Controller類中實現界面刷新。動畫

具體實現

一、FilterView的實現

FilterView繼承UIView,包括了幾個用於顯示已選擇項內容的UIButton。atom

FilterView的Delegate

在Controller類中添加FilterView後,須要設置FilterView的delegate。FiltView的Delegate對應PullDownMenu的Delegate。也就是,點擊PullDownMenu中UITableView的某個Cell後,PullDownMenu Delegate ->FilterView Delegate -> Controller Functionspa

@class FilterView;

@protocol FilterViewDelegate <NSObject>
@optional
-(void)filterView:(FilterView*)filterView didSelectedCell:(NSDictionary*)info selectedMenuIndex:(NSInteger)tag;
-(void)filterViewWillDismiss;
@end

@property (assign, nonatomic) id<FilterViewDelegate> delegate;
FilterView的init方法:
//titleArray存儲了UIButton的默認title
- (id)initWithFrame:(CGRect)frame
   buttonTitleArray:(NSArray*)titleArray
    dataSourceArray:(NSArray*)dataArray
           delegate:(id<FilterViewDelegate>)delegate
設置UIButton的點擊事件:
[b addTarget:self
          action:@selector(showTableView:) 
forControlEvents:UIControlEventTouchUpInside];

showTableView:顯示PullDownMenu。代理

[PullDownMenu showMenuBelowView:self
                          array:[_dataArray objectAtIndex:b.tag]
              selectedMenuIndex:b.tag
                 selectedDetail:[_selectedArray objectAtIndex:b.tag]
                       delegate:self];

[_dataArray objectAtIndex:b.tag]爲存儲的顯示的內容。code

二、PullDownMenu的實現

FilterView的UIButton點擊後,建立PullDownMenu以及對應UITableView,並顯示PullDownMenu。PullDownMenu是一個UIView,上面添加UITableView。繼承

PullDownMenu的init

-(UIView*)createPullDownMenuView:(NSArray *)array
               selectedMenuIndex:(NSInteger)tag
                  selectedDetail:(NSDictionary*)selectedDetail
                        delegate:(id<PullDownMenuDelegate>)delegate

經過array判斷是否有二級菜單。

顯示PullDownMenu並點擊

經過設置PullDownMenu的Frame調用[UIView animateWithDuration..]方法,來動畫顯示PullDownMenu。PullDownMenu的點擊經過-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath來實現。

仍是看代碼最清楚了點擊下載代碼
相關文章
相關標籤/搜索