如何实现iOS的二级菜单效果
来源:爱站网时间:2020-12-25编辑:网友分享
iOS如何实现简单的菜单效果?是不是很多用户们都有这个疑问呢?那么下面我们就一起看看,文中小编给出了详细的示例代码,感兴趣的朋友们可以参考借鉴。
iOS如何实现简单的菜单效果?是不是很多用户们都有这个疑问呢?那么下面我们就一起看看,文中小编给出了详细的示例代码,感兴趣的朋友们可以参考借鉴。
首先来看看要实现的效果图

示例代码如下
Untitled.gif #import "ViewController.h" #import "CollectionViewCell.h" #import "CollectionSectionView.h" @interface ViewController ()@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. }
#importtypedef 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的二级菜单效果了吗?下次如果出现类似问题,大家可以用这种办法去解决哦。
