别人的iOS精华iOS学习iOS Developer

iOS 简单菜单效果的实现

2016-10-21  本文已影响342人  LYSNote

github下载地址:

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
上一篇下一篇

猜你喜欢

热点阅读