添加标题按钮

  • 给标题栏添加按钮

    • 注意: 这里的按钮是自定义按钮类型
    // 给标题栏添加按钮
    NSArray *titleArray = @[@"全部",@"视频",@"声音",@"图片",@"段子"];
    NSInteger count = titleArray.count;
    CGFloat titlwWidth = titleView.CDH_width / count;
    for (NSInteger i = 0; i < count; ++i) {
    
        CDHTitleButton *titleButton = [[CDHTitleButton alloc] init];
        titleButton.tag = i;
        [titleView addSubview:titleButton];
        [titleButton setTitle:titleArray[i] forState:UIControlStateNormal];
        titleButton.frame = CGRectMake(i * titlwWidth, 0 , titlwWidth, titleView.CDH_height);
        // 监听按钮点击事件
        [titleButton addTarget:self action:@selector(clickTitleButton:) forControlEvents:UIControlEventTouchUpInside];
    }
    
  • 实现监听按钮点击事件的方法

    • 注意: 代码的先后顺, 下面代码是有问题的, 如果对一个按钮连点 2次及以上就出问题了

    • 如下面代码顺序正确了, 连点多次也是没有问题了

  • 在监听的时候恢复颜色和按钮初始化的颜色要一样, 这样就比较麻烦了, 这时候我们就可以一次性给按钮设置对应状态的颜色,只要给按钮修改状态, 状态修改,则会显示对应的颜色

    // 在自定义按钮中统一设置所有标题按钮各种状态的颜色
    - (instancetype)initWithFrame:(CGRect)frame{
        if ([super initWithFrame:frame]) {
            // 在这里统一设置字体颜色这字体的大小
            self.titleLabel.font = [UIFont systemFontOfSize:16];
            [self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
            [self setTitleColor:[UIColor redColor] forState:UIControlStateSelected];
        }
        return self;
    }
    
    /**
     *  监听标题按钮点击
     */
    - (void)titleButtonClick:(XMGTitleButton *)titleButton
    {
        // 修改按钮的状态
        // 上一个点击的按钮 -> 暗灰色
        self.previousClickedTitleButton.selected = NO;
        // 新点击的按钮 -> 红色
        titleButton.selected = YES;
        self.previousClickedTitleButton = titleButton;
    
        // 下划线
        [UIView animateWithDuration:0.25 animations:^{
            self.titleUnderline.xmg_width = titleButton.titleLabel.xmg_width + 10;
            self.titleUnderline.xmg_centerX = titleButton.xmg_centerX;
        }];
    }
    
  • 注意: 如果使用选中状态, 还是能够接受事件, 这时候如果在点击, 就会有选中状态和高亮状态都设置了, 这时候就会显示 normal 的颜色了, 因此要自定按钮,将高亮状态取消(重写高亮状态的 get / set 方法,)即可

    /**
     *  不让按钮达到高亮状态
     */
    - (void)setHighlighted:(BOOL)highlighted {}
    
  • 注意: 由于字体大小和状态的某些属性是一样的, 则这时候要在 init… 构造方法中写即可

    - (instancetype)initWithFrame:(CGRect)frame
    {
        if (self = [super initWithFrame:frame]) {
            self.titleLabel.font = [UIFont systemFontOfSize:16];
            // 文字颜色
            [self setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal];
            [self setTitleColor:[UIColor redColor] forState:UIControlStateSelected];
        }
        return self;
    }
    

results matching ""

    No results matching ""