专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构
设置左边导航栏
自定义
CZTopItem
@interface CZTopItem : UIView - (void)setIcon:(NSString *)icon; - (void)setTitle:(NSString *)title; - (void)setSubTitle:(NSString *)subTitle; @end
// // CZHomeTopItem.m // QQ空间 // // Created by zhangping on 16/2/2. // Copyright © 2016年 zhangping. All rights reserved. // #import "CZTopItem.h" @interface CZTopItem () /// 分割线 @property (strong, nonatomic) UIView *separatorView; /// 图片按钮 @property (strong, nonatomic) UIButton *iconButton; /// 大标题 @property (strong, nonatomic) UILabel *titleLabel; /// 小标题 @property (strong, nonatomic) UILabel *subTitleLabel; @end @implementation CZTopItem + (instancetype)topItemWithIcon:(NSString *)icon title:(NSString *)title subTitle:(NSString *)subTitle { CZTopItem *topItem = [[CZTopItem alloc] init]; [topItem setIcon:icon]; [topItem setTitle:title]; [topItem setSubTitle:subTitle]; topItem.frame = CGRectMake(0, 0, 100, 44); return topItem; } - (instancetype)init { if (self = [super init]) { [self prepareUI]; } return self; } - (void)prepareUI { // 添加子控件 [self addSubview:self.separatorView]; [self addSubview:self.iconButton]; [self addSubview:self.titleLabel]; [self addSubview:self.subTitleLabel]; // 添加约束 [self.separatorView mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self); make.top.equalTo(self).offset(12); make.bottom.equalTo(self).offset(-12); make.width.equalTo(@1); }]; [self.iconButton mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(self); }]; [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self).offset(36); make.top.equalTo(self).equalTo(@5); }]; [self.subTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self.titleLabel); make.bottom.equalTo(self).equalTo(@-5); }]; } - (void)setIcon:(NSString *)icon { NSString *highlightedImageName = [NSString stringWithFormat:@"%@_highlighted", icon]; [self.iconButton setImage:[UIImage imageNamed:icon] forState:UIControlStateNormal]; [self.iconButton setImage:[UIImage imageNamed:highlightedImageName] forState:UIControlStateHighlighted]; } - (void)setTitle:(NSString *)title { self.titleLabel.text = title; } - (void)setSubTitle:(NSString *)subTitle { self.subTitleLabel.text = subTitle; } #pragma mark - 懒加载 - (UIView *)separatorView { if (_separatorView == nil) { _separatorView = [[UIImageView alloc] init]; _separatorView.backgroundColor = [UIColor blackColor]; _separatorView.alpha = 0.2; } return _separatorView; } - (UIButton *)iconButton { if (_iconButton == nil) { _iconButton = [UIButton buttonWithType:UIButtonTypeCustom]; _iconButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; _iconButton.imageEdgeInsets = UIEdgeInsetsMake(0, 5, 0, 0); } return _iconButton; } - (UILabel *)titleLabel { if (_titleLabel == nil) { _titleLabel = [[UILabel alloc] init]; _titleLabel.font = [UIFont systemFontOfSize:12]; } return _titleLabel; } - (UILabel *)subTitleLabel { if (_subTitleLabel == nil) { _subTitleLabel = [[UILabel alloc] init]; _subTitleLabel.font = [UIFont systemFontOfSize:12]; } return _subTitleLabel; } @end
在
CZPictureWallViewController
里面定义setupLeftNav
方法来设置导航栏左边按钮- (void)setupLeftNav { CZTopItem *categoryTopItem = [[CZTopItem alloc] init]; [categoryTopItem setIcon:@"icon_district"]; [categoryTopItem setTitle:@"主标题"]; [categoryTopItem setSubTitle:@"子标题"]; UIBarButtonItem *categoryItem = [[UIBarButtonItem alloc] initWithCustomView:categoryTopItem]; categoryTopItem.frame = CGRectMake(0, 0, 100, 44); [categoryTopItem sizeToFit]; self.navigationItem.leftBarButtonItem = categoryItem; CZTopItem *regionTopItem = [[CZTopItem alloc] init]; [regionTopItem setIcon:@"icon_district"]; [regionTopItem setTitle:@"主标题"]; [regionTopItem setSubTitle:@"子标题"]; UIBarButtonItem *regionItem = [[UIBarButtonItem alloc] initWithCustomView:regionTopItem]; regionTopItem.frame = CGRectMake(0, 0, 100, 44); self.navigationItem.leftBarButtonItems = @[categoryItem, regionItem]; }
在
viewDidLoad
中调用- (void)viewDidLoad { [super viewDidLoad]; [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier]; [self setupLeftNav]; [self setupRightNav]; }
封装
CZTopItem
,可以发现每创建一个CZTopItem
都需要设置Icon
、Title
、SubTitle
和frame
,这些代码比较长,设置这些参数对我们自己来说是比较清楚的,但是如果给其他同事使用,他就不知道需要设置哪些参数.有可能会遗漏.给CZTopItem
添加一个类方法来设置这些参数+ (instancetype)topItemWithIcon:(NSString *)icon title:(NSString *)title subTitle:(NSString *)subTitle { CZTopItem *topItem = [[CZTopItem alloc] init]; [topItem setIcon:icon]; [topItem setTitle:title]; [topItem setSubTitle:subTitle]; topItem.frame = CGRectMake(0, 0, 100, 44); return topItem; }
在
CZPictureWallViewController
的setupLeftNav
里面调用/// 设置导航栏左边 - (void)setupLeftNav { CZTopItem *categoryTopItem = [CZTopItem topItemWithIcon:@"icon_district" title:@"主标题" subTitle:@"子标题"]; UIBarButtonItem *categoryItem = [[UIBarButtonItem alloc] initWithCustomView:categoryTopItem]; self.navigationItem.leftBarButtonItem = categoryItem; CZTopItem *regionTopItem = [CZTopItem topItemWithIcon:@"icon_district" title:@"主标题" subTitle:@"子标题"]; UIBarButtonItem *regionItem = [[UIBarButtonItem alloc] initWithCustomView:regionTopItem]; self.navigationItem.leftBarButtonItems = @[categoryItem, regionItem]; }
- 可以看到外面调用就变得十分简单了