iOS下拉选择菜单简单封装_IOS

本文实例为大家分享了简单封装的iOS下拉选择菜单代码,供大家参考,具体内容如下

//
// OrderListDownMenu.h 

#import <UIKit/UIKit.h> 

@protocol OrderListDownMenuDelegate <NSObject> 

- (void)OrderListDownMenu:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath; 

@end 

typedef void(^Dismiss)(void); 

@interface OrderListDownMenu : UIView<UITableViewDataSource, UITableViewDelegate> 

@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, assign) id<OrderListDownMenuDelegate> delegate;
@property (nonatomic, strong) NSArray *arrData;
@property (nonatomic, strong) NSArray *arrImgName;
@property (nonatomic, copy) Dismiss dismiss; 

- (instancetype)initWithDataArr:(NSArray *)dataArr origin:(CGPoint)origin width:(CGFloat)width rowHeight:(CGFloat)rowHeight; 

- (void)dismissWithCompletion:(void (^)(OrderListDownMenu *object))completion; 

@end 
#import "OrderListDownMenu.h" 

#define TopToView 63.0f
#define rightToView kScreenWidth - 15.0f
#define LeftToView kScreenWidth - 145.0 - 10.0f
#define CellLineEdgeInsets UIEdgeInsetsMake(0, -80, 0, 0)
#define kScreenWidth    [UIScreen mainScreen].bounds.size.width
#define kScreenHeight    [UIScreen mainScreen].bounds.size.height 

@interface OrderListDownMenu() 

@property (nonatomic, assign) CGPoint origin;
@property (nonatomic, assign) CGFloat rowHeight; 

@end 

@implementation OrderListDownMenu 

- (instancetype)initWithDataArr:(NSArray *)dataArr origin:(CGPoint)origin width:(CGFloat)width rowHeight:(CGFloat)rowHeight { 

  self = [super initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)];
  if (self) {
    if (rowHeight <= 0) {
      rowHeight = 50;
    } 

    // 设置背景颜色
    self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.2];
    self.origin = origin;
    self.rowHeight = rowHeight;
    self.arrData = [dataArr copy];
    self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(origin.x + LeftToView, origin.y + TopToView, width, rowHeight * dataArr.count) style:UITableViewStylePlain];
    _tableView.dataSource = self;
    _tableView.delegate = self;
    [self addSubview:_tableView]; 

    _tableView.backgroundColor = [UIColor whiteColor];
    _tableView.layer.cornerRadius = 2;
    _tableView.bounces = NO;
    _tableView.layer.cornerRadius = 8;
    _tableView.separatorColor = [UIColor colorWithWhite:0.3 alpha:1]; 

    _tableView.separatorStyle = UITableViewCellSelectionStyleNone;
    [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"]; 

    if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
      [self.tableView setSeparatorInset:CellLineEdgeInsets];
    } 

    if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
      [self.tableView setLayoutMargins:CellLineEdgeInsets];
    }
  }
  return self;
} 

- (void)layoutSubviews {
  [super layoutSubviews];
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  return self.arrData.count;
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
  return self.rowHeight;
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
  cell.textLabel.textColor = THEME_COLOR_GRAY_1;
  cell.textLabel.font = [UIFont systemFontOfSize:15];
  cell.textLabel.text = self.arrData[indexPath.row]; 

  if (self.arrImgName.count > indexPath.row) {
    cell.imageView.image = [UIImage imageNamed:self.arrImgName[indexPath.row]];
    cell.imageView.contentMode = UIViewContentModeScaleAspectFit;
  } 

  UILabel *label = [[UILabel alloc] init];
  label.frame = CGRectMake(0, 49, _tableView.frame.size.width, 0.5);
  label.backgroundColor = THEME_SEPARATOR_COLOR;
  [cell.contentView addSubview:label]; 

  return cell;
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

  if([self.delegate respondsToSelector:@selector(OrderListDownMenu:didSelectRowAtIndexPath:)]){
    [self.delegate OrderListDownMenu:tableView didSelectRowAtIndexPath:indexPath];
  } 

  [tableView deselectRowAtIndexPath:indexPath animated:YES];
  [self dismissWithCompletion:nil];
} 

- (void)dismissWithCompletion:(void (^)(OrderListDownMenu *object))completion { 

  __weak __typeof(self) weakSelf = self;
  [UIView animateWithDuration:0.2 animations:^{
    weakSelf.alpha = 0;
    weakSelf.tableView.frame = CGRectMake(weakSelf.origin.x + LeftToView + 145, weakSelf.origin.y + TopToView, 0, 0);
  } completion:^(BOOL finished) {
    [weakSelf removeFromSuperview];
    if (completion) {
      completion(weakSelf);
    }
    if (weakSelf.dismiss) {
      weakSelf.dismiss();
    }
  }];
} 

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 

  UITouch *touch = [touches anyObject];
  if (![touch.view isEqual:self.tableView]) {
    [self dismissWithCompletion:nil];
  }
} 

- (void)drawRect:(CGRect)rect { 

  //[colors[serie] setFill]; 

  //拿到当前视图准备好的画板 

  CGContextRef context = UIGraphicsGetCurrentContext(); 

  //利用path进行绘制三角形 

  CGContextBeginPath(context);//标记 

  CGContextMoveToPoint(context,
             rightToView - 13, 53);//设置起点 

  CGContextAddLineToPoint(context,
              rightToView - 21, TopToView); 

  CGContextAddLineToPoint(context,
              rightToView - 4, TopToView); 

  CGContextClosePath(context);//路径结束标志,不写默认封闭 

  [self.tableView.backgroundColor setFill]; //设置填充色 

  [self.tableView.backgroundColor setStroke]; //设置边框颜色 

  CGContextDrawPath(context,
           kCGPathFillStroke);//绘制路径path
} 

@end 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索iOS下拉选择菜单
, iOS下拉菜单
iOS选择菜单
ios 下拉菜单封装、ftl 封装 下拉菜单宏、简单的下拉菜单、简单下拉菜单、jquery简单下拉菜单,以便于您获取更多的相关知识。

时间: 2024-08-30 12:53:21

iOS下拉选择菜单简单封装_IOS的相关文章

ajax读取数据库内容实现二级联动下拉选择菜单示例

本文为大家介绍下使用ajax技术读取数据库内容并生成二级联动下拉选择菜单,具体实现如下,感兴趣的朋友可以参考下,希望对大家有所帮助   复制代码 代码如下: <PRE class=javascript name="code"></PRE><PRE class=javascript name="code">---------------------这是ajax(javascript)代码 ----------------------

js实现的全国省市二级联动下拉选择菜单完整实例_javascript技巧

本文实例讲述了js实现的全国省市二级联动下拉选择菜单.分享给大家供大家参考.具体如下: 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-province-city-cho-menu-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-

基于javascript实现全国省市二级联动下拉选择菜单_javascript技巧

本文实例讲述了js实现全国省市二级联动下拉选择菜单,分享给大家供大家参考.具体如下: 效果图:   具体代码: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>无标题文档</title> <script type="text/javascript"

一个方法搞定iOS下拉放大及上推缩小_IOS

下面这种效果在ios应用中很常见: 实现思路: 1、创建头部的视图和tableview,需要注意的是tableview要设置contentInset,contentInsent 的顶部要和头部视图的背景图的高度一样,否则会有空隙(或是有遮挡). myTableView.contentInset = UIEdgeInsetsMake(headRect.size.height-navHeight-navHeight, 0, 0, 0); 2、对头部视图的背景图片的尺寸进行处理,当然,你也可以直接找一

纯JSP+DWR实现三级联动下拉选择菜单实现技巧_JSP编程

网上看到一些例子,对于一个简单的三级联动,都加上什么Struts, Hibernate诸如此类的框架.这个Ajax联动殊不知和这些框架有什么关系,一个小Demo干嘛整得那么大. 今天我做了一个dwr+jsp做的例子. web.xml: 复制代码 代码如下: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.s

ajax读取数据库内容实现二级联动下拉选择菜单示例_AJAX相关

复制代码 代码如下: <PRE class=javascript name="code"></PRE><PRE class=javascript name="code">---------------------这是ajax(javascript)代码---------------------------</PRE><PRE class=javascript name="code">&l

iOS实现顶部标签式导航栏及下拉分类菜单_IOS

本文实例为大家分享了iOS实现顶部标签式导航栏及下拉分类菜单的全部过程,供大家参考,具体内容如下 当内容及分类较多时,往往采用顶部标签式导航栏,例如网易新闻客户端的顶部分类导航,最近刚好有这样的应用场景,参考网络上一些demo,实现了这种导航效果,记录一些要点. 效果图(由于视频转GIF掉帧,滑动和下拉动画显得比较生硬,刚发现quickTime可以直接录制手机视频,推荐一下,很方便) 1.顶部标签式导航栏 (1)实现思路 其实就是在上下两个UIScrollView上做文章,实现联动选择切换的效果

JS简单设置下拉选择框默认值的方法_javascript技巧

本文实例讲述了JS简单设置下拉选择框默认值的方法.分享给大家供大家参考,具体如下: //根据下拉对象默认选中后台对应的记录 function setSelectOption(objSelect, targetValue){ if(objSelect){ var options = objSelect.options; if(options){ var len = options.length; for(var i=0;i<len;i++){ if(options[i].value == targ

纯CSS实现超简单的二级下拉导航菜单代码

本文实例讲述了纯CSS实现超简单的二级下拉导航菜单代码.分享给大家供大家参考.具体如下: 这是一款纯CSS菜单,二级下拉导航效果,是最简洁的CSS导航菜单,兼容性也很棒,IE7/8.火狐等都支持,而且它还是学习CSS菜单编写的典型教程,让你学会很多CSS技巧. 运行效果截图如下: 具体代码如下:   复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.