開發App時,常常須要根據不一樣條件顯示相應的數據。使用下拉菜單是一種很好的方案,包括一級菜單和二級菜單。git
一、一直顯示並能夠點擊的View1(FilterView),由UIButton組成。github
二、顯示下拉菜單的View2(PulldownMenu),由UITableView組成。有二級菜單時,則由兩個UITableView組成。segmentfault
一、點擊View1中的UIButton後,顯示View2。ide
二、點擊View2中的TableView的Cell後,更改對應的View1中UIButton的Title。經過設置代理,在Controller類中實現界面刷新。動畫
FilterView繼承UIView,包括了幾個用於顯示已選擇項內容的UIButton。atom
在Controller類中添加FilterView後,須要設置FilterView的delegate。FiltView的Delegate對應PullDownMenu的Delegate。也就是,點擊PullDownMenu中UITableView的某個Cell後,PullDownMenu Delegate
->FilterView Delegate
-> Controller Function
。spa
@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;
//titleArray存儲了UIButton的默認title - (id)initWithFrame:(CGRect)frame buttonTitleArray:(NSArray*)titleArray dataSourceArray:(NSArray*)dataArray delegate:(id<FilterViewDelegate>)delegate
[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
FilterView的UIButton點擊後,建立PullDownMenu以及對應UITableView,並顯示PullDownMenu。PullDownMenu是一個UIView,上面添加UITableView。繼承
-(UIView*)createPullDownMenuView:(NSArray *)array selectedMenuIndex:(NSInteger)tag selectedDetail:(NSDictionary*)selectedDetail delegate:(id<PullDownMenuDelegate>)delegate
經過array判斷是否有二級菜單。
經過設置PullDownMenu的Frame調用[UIView animateWithDuration..]
方法,來動畫顯示PullDownMenu。PullDownMenu的點擊經過-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
來實現。