iOS三级下拉菜单功能实现

  

  

应用常用控件——多级下拉菜单,如团购类,房屋类,对数据进行筛选。有一级,二级,三级,再多就不会以这种样式,呈现给用户了。作者就简单聊一下多级下拉菜单

  

 iOS三级下拉菜单功能实现“> <br/>
  </p>
  <p> </p>
  <ol>
  <李>默认显示一个视图,点击数据后,添加第二个表视图,并实现大小变化李</>
  <李>第二次打开下拉菜单。保存上次选中数据李</>
  </ol>
  <p> </p>
  </p> <p> . h文件
  
  <pre类=   # import & lt; UIKit/UIKit.h>      @class DropMenuView;   @protocol DropMenuViewDelegate & lt; NSObject>      - (void) dropMenuView: (dropMenuView *)视图didSelectName: str (NSString *);      @end      @ interface DropMenuView: UIView      @ property(原子、弱)id委托;/* *箭头变化*/@ property(原子、强)UIView * arrowView;/* *   控件设置   @param观点提供控件位置信息   @param tableNum显示TableView数量   @param arr使用数据   */- (void) creatDropView: (UIView *)视图withShowTableNum: (NSInteger) tableNum withData: arr (NSArray *);/* *视图消失*/- (void)驳回;      @end      之前      

m文件         #进口“DropMenuView.h”      #定义kWidth [UIScreen mainScreen] .bounds.size.width   #定义kHeight [UIScreen mainScreen] .bounds.size.height      @ interface DropMenuView () & lt; UITableViewDelegate UITableViewDataSource>   {   @private/* *保存选择的数据(行数)*/NSInteger选择[3];   }      @ property(原子,分配)BOOL显示;//按钮点击后视图显示/隐藏   @ property(原子,分配)是CGFloat rowHeightNum;//设置罗高度/*底层取消按钮*/@ property(原子、强)UIButton * cancelButton;/* *表视图数组*/@ property(原子、强)NSArray * tableViewArr;/* *表视图的底部视图*/@ property(原子、强)UIView * tableViewUnderView;/* *显示TableView数量*/@ property(原子,分配)NSInteger tableCount;/* *数据*/@ property(原子、强)NSArray * dataArr;      @end         @ implementation DropMenuView         - (instancetype)初始化   {   自我=(超级init);   如果(自我){/* *数据初始化*/自我。dataArr=[NSArray数组);/* *保存初始值为1 */for (int i=0;我& lt;3;我+ +){   选择[我]=1;   }/*底层取消按钮*/自我。cancelButton=[UIButton buttonWithType UIButtonTypeCustom):;   self.cancelButton。α写成backgroundColor=[用户界面颜色colorWithWhite: 0.0: 0.3);   (自我。cancelButton addTarget:自我行动:@ selector (clickCancelButton:) forControlEvents: UIControlEventTouchUpInside];   (自我addSubview: self.cancelButton);/* *表视图的底部视图初始化*/自我。tableViewUnderView=[[UIView alloc] init);   self.tableViewUnderView。格林写成backgroundColor=[用户界面颜色colorWithRed: 0.74: 0.73蓝色:0.76 alpha: 1.000);   (自我。cancelButton addSubview self.tableViewUnderView):;/* *默认设置为不,行高度为40 */自我。显示=没有;   自我。rowHeightNum f=40.0;      }   回归自我;   }         - (void) creatDropView: (UIView *)视图withShowTableNum: (NSInteger) tableNum withData: arr (NSArray *) {      如果(! self.show) {      自我。展示=! self.show;//显示TableView数量   自我。tableCount=tableNum;//数据   自我。dataArr=arr;   (UITableView * tableView self.tableViewArr) {   [tableView reloadData];   }//初始位置设置   CGFloat x=0. f;   CGFloat y=view.frame.origin.y + view.frame.size.height;   CGFloat w=kWidth;   CGFloat h=kHeight - y;      self.frame=CGRectMake (x, y, w h);   self.cancelButton.frame=CGRectMake (0, 0, self.frame.size.width self.frame.size.height);   self.tableViewUnderView.frame=CGRectMake (0, 0, self.frame.size.width,自我。rowHeightNum * 7);      如果(! self.superview) {      [[[UIApplication sharedApplication] keyWindow] addSubview:自我);   自我。α=0.0度;   [UIView animateWithDuration: 0.2 f动画:^ {   自我。α=1.0度;   });         (自我loadSelects);   (自我adjustTableViews);   }      其他}{/* *什么也不选择时候,再次点击按钮消失视图*/(自认为);   }   }         # pragma马克-加载选中的视图   - (void) loadSelects {      (自我。tableViewArr enumerateObjectsUsingBlock: ^ (UITableView * tableView了NSUInteger idx, BOOL * _Nonnull停止){//刷新TableView数据   [tableView reloadData];//选TableView中某一行   [tableView selectRowAtIndexPath: [NSIndexPath indexPathForRow:选择(idx)切口:0]动画:没有scrollPosition: UITableViewScrollPositionNone);//加! idx是因为循环第一次idx==0方法不执行,所以需要循环一次加载一个视图。   如果(选择[idx] !=1,,! tableView.superview) | | ! idx) {      (自我。tableViewUnderView addSubview tableView):;      [UIView animateWithDuration: 0.2动画:^ {   如果(self.arrowView) {   self.arrowView。变换=CGAffineTransformMakeRotation (M_PI);   }   });   }   });      }      # pragma马克-重置TableView的位置   - (void) adjustTableViews {//显示的TableView数量   int addTableCount=0;   (UITableView * tableView self.tableViewArr) {      如果(tableView.superview) {   addTableCount + +;   }   }      for (int i=0;我& lt;addTableCount;我+ +){      UITableView * tableView=self.tableViewArr[我];   CGRect中adjustFrame=tableView.frame;      adjustFrame.size。宽度=kWidth/addTableCount;   adjustFrame.origin。x=adjustFrame.size。宽度*我+ 0.5 *;   adjustFrame.size。身高=self.tableViewUnderView.frame.size.height;      tableView.frame=adjustFrame;   }      }         # pragma马克- TableView协议/* *行数*/?NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection:也(NSInteger)节{      NSInteger __block计数;   (自我。tableViewArr enumerateObjectsUsingBlock: ^ (id _Nonnull obj了NSUInteger idx, BOOL * _Nonnull停止){      如果(obj==tableView) {      NSInteger firstSelectRow=((UITableView *) self.tableViewArr [0]) .indexPathForSelectedRow。行;   NSInteger secondSelectRow=((UITableView *) self.tableViewArr [1]) .indexPathForSelectedRow。行;      null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

iOS三级下拉菜单功能实现