iOS实现简单的二级菜单效果

 更新时间:2016年10月28日 08:55:03   作者:LYSNote  
这篇文章给大家主要介绍的是利用iOS如何实现简单的菜单效果,文中给出了详细的示例代码,而且实现的比较简单,适合新人学习使用。感兴趣的朋友们可以参考借鉴,下面来一起看看吧。

首先来看看要实现的效果图

示例代码如下

Untitled.gif
#import "ViewController.h"
#import "CollectionViewCell.h"
#import "CollectionSectionView.h"
@interface ViewController ()<UICollectionViewDelegateFlowLayout,UICollectionViewDataSource>
@property (nonatomic,strong)UICollectionView *collectionView;
@property (nonatomic,copy)NSString *leftOrRight;
@property (nonatomic,strong)NSIndexPath *clickIndexPath;
@end
static NSString *cellIdentifier = @"CollectionViewCell";
static NSString *sectionIdentifier = @"CollectionSectionView";
@implementation ViewController

- (void)viewDidLoad {
 [super viewDidLoad];
 // Do any additional setup after loading the view, typically from a nib.
 UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
 flowLayout.itemSize = CGSizeMake(50, 25);
 flowLayout.minimumLineSpacing = 0;
 flowLayout.minimumInteritemSpacing = 0;
 flowLayout.headerReferenceSize = CGSizeMake(0, 40);
 flowLayout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);
 self.collectionView = [[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout:flowLayout];
 _collectionView.backgroundColor = [UIColor whiteColor];
 _collectionView.delegate = self;
 _collectionView.dataSource = self;
 [_collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:cellIdentifier];
 [_collectionView registerClass:[CollectionSectionView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:sectionIdentifier];
 [self.view addSubview:_collectionView];
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
 return 3;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
 if (self.clickIndexPath.section == section) {
  if (self.clickIndexPath.section == 0 && [self.leftOrRight isEqualToString:@"left"]) {
   return 3;
  }
  if (self.clickIndexPath.section == 0 && [self.leftOrRight isEqualToString:@"right"]) {
   return 4;
  }
  if (self.clickIndexPath.section == 1 && [self.leftOrRight isEqualToString:@"left"]) {
   return 10;
  }
  if (self.clickIndexPath.section == 1 && [self.leftOrRight isEqualToString:@"right"]) {
   return 8;
  }
  if (self.clickIndexPath.section == 2 && [self.leftOrRight isEqualToString:@"left"]) {
   return 33;
  }
  if (self.clickIndexPath.section == 2 && [self.leftOrRight isEqualToString:@"right"]) {
   return 6;
  }
 }
 return 0;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
 CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
 cell.label.text = [NSString stringWithFormat:@"%ld-%ld",indexPath.section,indexPath.row];
 return cell;
}
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
 if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {
  CollectionSectionView *sectionView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:sectionIdentifier forIndexPath:indexPath];
  sectionView.backgroundColor = [UIColor lightGrayColor];
  sectionView.leftStr = @"家具";
  sectionView.rightStr = @"家电";
  [sectionView customBtnHandelAction:^(NSString *leftOrRight) {
   self.clickIndexPath = indexPath;
   self.leftOrRight = leftOrRight;
   [collectionView reloadData];
  }];
  return sectionView;
 }
 return nil;
}
- (void)didReceiveMemoryWarning {
 [super didReceiveMemoryWarning];
 // Dispose of any resources that can be recreated.
}
#import <UIKit/UIKit.h>
typedef void(^BtnHandleAction)(NSString *leftOrRight);
@interface CollectionSectionView : UICollectionReusableView
@property (nonatomic,copy)NSString *leftStr;
@property (nonatomic,copy)NSString *rightStr;
- (void)customBtnHandelAction:(BtnHandleAction)action;
@end
#import "CollectionSectionView.h"
@interface CollectionSectionView ()
@property (nonatomic,strong)UIButton *leftBtn;
@property (nonatomic,strong)UIButton *rightBtn;
@property (nonatomic,copy)BtnHandleAction btnHandelAction;
@end
@implementation CollectionSectionView
- (instancetype)initWithFrame:(CGRect)frame
{
 self = [super initWithFrame:frame];
 if (self) {
  [self setup];
 }
 return self;
}
- (UIButton *)leftBtn{
 if (!_leftBtn) {
  self.leftBtn = [UIButton buttonWithType:(UIButtonTypeCustom)];
  _leftBtn.tag = 2000;
  _leftBtn.frame = CGRectMake(1, 1, self.frame.size.width / 2 - 2, self.frame.size.height - 2);
  _leftBtn.backgroundColor = [UIColor whiteColor];
  [_leftBtn addTarget:self action:@selector(btnAction:) forControlEvents:(UIControlEventTouchUpInside)];
 }
 return _leftBtn;
}
- (UIButton *)rightBtn{
 if (!_rightBtn) {
  self.rightBtn = [UIButton buttonWithType:(UIButtonTypeCustom)];
  _rightBtn.tag = 2001;
  _rightBtn.frame = CGRectMake(self.frame.size.width / 2 + 1, 1, self.frame.size.width / 2 - 2, self.frame.size.height - 2);
  _rightBtn.backgroundColor = [UIColor whiteColor];
  [_rightBtn addTarget:self action:@selector(btnAction:) forControlEvents:(UIControlEventTouchUpInside)];
 }
 return _rightBtn;
}
- (void)btnAction:(UIButton *)sender{
 NSInteger tag = sender.tag;
 if (tag == 2000) {
  self.btnHandelAction(@"left");
 }
 if (tag == 2001) {
  self.btnHandelAction(@"right");
 }
}
- (void)customBtnHandelAction:(BtnHandleAction)action{
 self.btnHandelAction = action;
}
- (void)setup{
 [self addSubview:self.leftBtn];
 [self addSubview:self.rightBtn];
}
- (void)setLeftStr:(NSString *)leftStr{
 [self.leftBtn setTitle:leftStr forState:(UIControlStateNormal)];
 [self.leftBtn setTitleColor:[UIColor blackColor] forState:(UIControlStateNormal)];
}
- (void)setRightStr:(NSString *)rightStr{
 [self.rightBtn setTitle:rightStr forState:(UIControlStateNormal)];
 [self.rightBtn setTitleColor:[UIColor blackColor] forState:(UIControlStateNormal)];
}
@end

总结

以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能有所帮助,如果有疑问大家可以留言交流。

相关文章

  • iOS应用中UILabel文字显示效果的常用设置总结

    iOS应用中UILabel文字显示效果的常用设置总结

    UILabel组件可以用来设置文字内容的排版与字体效果等,功能非常多,下面就来为大家整理一下基本的iOS应用中UILabel文字显示效果的常用设置总结
    2016-05-05
  • iOS 中使用tableView实现右滑显示选择功能

    iOS 中使用tableView实现右滑显示选择功能

    这篇文章主要介绍了iOS 中使用tableView实现右滑显示选择功能的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • iOS为UIView设置阴影效果

    iOS为UIView设置阴影效果

    现在很多的开发者们都会在开发的时候加阴影效果,所以这篇文章跟大家分享下iOS为UIView设置阴影效果的实现过程,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-09-09
  • iOS实现UITableView数据为空时的提示页面

    iOS实现UITableView数据为空时的提示页面

    最近工作中遇到一个需求,当UITableView数据为空的时候,给出一个简单的提示页面,通过从网上查找解决的方法,发现了两种实现的方法,现在分享给大家,有需要的朋友们可以参考借鉴,下面感兴趣的朋友们来一起学习学习吧。
    2016-11-11
  • swift3.0网络图片缓存原理简析

    swift3.0网络图片缓存原理简析

    这篇文章主要为大家简析了swift3.0网络图片缓存原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • iOS9 系统分享调用之UIActivityViewController

    iOS9 系统分享调用之UIActivityViewController

    UIActivityViewController类是一个标准的view controller,通个使用这个controller,你的应用程序就可以提供各种服务。本文给大家介绍iOS9 系统分享调用之UIActivityViewController,感兴趣的朋友一起学习吧
    2015-11-11
  • iOS中 UIImage根据屏宽调整size的实例代码

    iOS中 UIImage根据屏宽调整size的实例代码

    最近做项目遇到这样一个需求,要求UIImage根据屏幕宽度按照自己本身比例改变高度,下面通过本文给大家分享iOS UIImage根据屏宽调整size的实例代码,需要的朋友参考下吧
    2017-01-01
  • IOS开发Swift 与 OC相互调用详解

    IOS开发Swift 与 OC相互调用详解

    这篇文章主要为大家介绍了IOS开发Swift 与 OC相互调用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • iOS中的NSTimer定时器的初步使用解析

    iOS中的NSTimer定时器的初步使用解析

    这篇文章主要介绍了iOS中的NSTimer定时器的初步使用解析,通过例子简单讲解了NSTimer的输出与停止的方法,需要的朋友可以参考下
    2016-05-05
  • iOS中使用schema协议调用APP和使用iframe打开APP的例子

    iOS中使用schema协议调用APP和使用iframe打开APP的例子

    这篇文章主要介绍了iOS中使用schema协议调用APP和使用iframe打开APP的例子,用在浏览器中打开APP,需要的朋友可以参考下
    2014-08-08

最新评论