专业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都需要设置 IconTitleSubTitleframe,这些代码比较长,设置这些参数对我们自己来说是比较清楚的,但是如果给其他同事使用,他就不知道需要设置哪些参数.有可能会遗漏.给 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;
      }
    
  • CZPictureWallViewControllersetupLeftNav 里面调用

      /// 设置导航栏左边
      - (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];
      }
    
  • 可以看到外面调用就变得十分简单了