资讯专栏INFORMATION COLUMN

一个自定义数字按钮的实现

lpjustdoit / 2856人阅读

摘要:控件功能在上嵌一个控件,从服务器获得,在页面加载后默认显示,然后按,个数增加按,个数减少。在个数小于时,按钮不可用。调用类和类的点击事件的关联,用协议和代理实现。

控件功能:
在View上嵌一个控件,从服务器获得defaultNumber,在页面加载后默认显示,然后按"+",个数增加;按"-",个数减少。在个数小于minNumber时,"-"按钮不可用。

控件实现
新建一个类numberSelectView,继承UIView。控件都是在xib文件中使用,需要实现-(id)initWithCoder方法进行初始化。调用类和numberSelectView类的点击事件的关联,用协议和代理实现。
代码

代码最直接了
.h文件

#import 

@class NumberSelectView;

@protocol NumberSelectViewDelegate 

-(void)numberSelectView:(NumberSelectView*)numberSelectView currentNumber:(NSInteger)currentNumber;
@ender 
@interface NumberSelectView : UIView
//服务器获得的数字
@property (nonatomic, assign) NSInteger defaultNumber;
//选择的最小值
@property (nonatomic, assign) NSInteger minNumber;
//当前显示的数字
@property (nonatomic, assign) NSInteger currentNumber;

@property (nonatomic, assign) id delegate;

@end

.m文件

#import "NumberSelectView.h"

@interface NumberSelectView()

@property (nonatomic, strong) UILabel *numberLabel;
@property (nonatomic, strong) UIButton *cutButton;
@end

@implementation NumberSelectView

-(id)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super initWithCoder:aDecoder]) {
        self.backgroundColor = [UIColor clearColor];
        [self setView:self.frame];
    }
    return self;
}

-(void)setView:(CGRect)frame
{
    UIButton* addButton = [UIButton buttonWithType:UIButtonTypeCustom];
    addButton.frame = CGRectMake(frame.size.width/2 + 15, 0, frame.size.width/2 - 15, frame.size.height);
    addButton.titleLabel.font = [UIFont systemFontOfSize:22];
    [addButton setTitle:@"+" forState:UIControlStateNormal];
    [addButton setBackgroundImage:[UIImage imageWithColor:[UIColor WhiteColor] cornerRadius:5] forState:UIControlStateNormal];
    [addButton addTarget:self action:@selector(addNumber:) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:addButton];
    _cutButton = [UIButton buttonWithType:UIButtonTypeCustom];
    _cutButton.frame = CGRectMake(0, 0, frame.size.width/2 - 15, frame.size.height);
    _cutButton.titleLabel.font = [UIFont systemFontOfSize:22];
    [_cutButton setTitle:@"-" forState:UIControlStateNormal];
    [_cutButton setBackgroundImage:[UIImage imageWithColor:[UIColor grayColor] cornerRadius:5] forState:UIControlStateNormal];
    [_cutButton addTarget:self action:@selector(cutNumber:) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:_cutButton];

    _numberLabel = [[UILabel alloc] initWithFrame:CGRectMake(frame.size.width/2 - 15, 0, 30, frame.size.height)];
    _numberLabel.backgroundColor = [UIColor clearColor];
    _numberLabel.font = [UIFont systemFontOfSize:14];
    _numberLabel.textColor = [UIColor darkGrayColor];
    _numberLabel.textAlignment = NSTextAlignmentCenter;
    _numberLabel.text = @"0";
    [self addSubview:_numberLabel];
}

-(void)setDefaultNumber:(NSInteger)defaultNumber
{
    _currentNumber = defaultNumber;
    [_cutButton setEnabled:_currentNumber>_minNumber];
    _numberLabel.text = [NSString stringWithFormat:@"%d",defaultNumber];
}

-(void)setMinNumber:(NSInteger)minNumber
{
    _minNumber = minNumber;
    [_cutButton setEnabled:_currentNumber>_minNumber];
}

-(void)setCurrentNumber:(NSInteger)currentNumber
{
    _currentNumber = currentNumber;
    [_cutButton setEnabled:_currentNumber>_minNumber];
    _numberLabel.text = [NSString stringWithFormat:@"%d",_currentNumber];
}

- (void)addNumber:(UIButton*)addButton
{
    _currentNumber++;
    _numberLabel.text = [NSString stringWithFormat:@"%d",_currentNumber];
    if (_delegate != nil && [_delegate respondsToSelector:@selector(numberSelectView:currentNumber:)]) {
        [_delegate numberSelectView:self currentNumber:_currentNumber];
    }
    [_cutButton setEnabled:(_currentNumber > _minNumber)];
}

- (void)cutNumber:(UIButton*)cutButton
{
    _currentNumber--;
    _numberLabel.text = [NSString stringWithFormat:@"%d",_currentNumber];
    if (_delegate != nil && [_delegate respondsToSelector:@selector(numberSelectView:currentNumber:)]) {
        [_delegate numberSelectView:self currentNumber:_currentNumber];
    }
    [cutButton setEnabled:!(_minNumber == _currentNumber)];
}

@end

在用到该View的类里,在delegate方法里写具体事件。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/15458.html

相关文章

  • 从零开始,SpreadJS新人学习笔记【第5周】

    摘要:复制粘贴单元格格式和单元格类型本周,让我们一起来学习的复制粘贴单元格格式和单元格类型,希望我的学习笔记能够帮助你们,从零开始学习,并逐步精通。 复制粘贴、单元格格式和单元格类型 本周,让我们一起来学习SpreadJS 的复制粘贴、单元格格式和单元格类型,希望我的学习笔记能够帮助你们,从零开始学习 SpreadJS,并逐步精通。 在此前的学习笔记中,相信大家已经学会并熟练掌握了Sprea...

    shadowbook 评论0 收藏0
  • 定义google map marker、tooltips、toggle switch、map st

    摘要:一个小项目要使用作为主要展示方式,在地图上展示世界某发展现状。完成了,跟默认的方法其实一模一样自定义因为使用了自适应布局,发现定位坐标也有点难,用普通的方法使用一个展示,时抓坐标,周围偏移个展示。最后使用了自定义方法来用模拟,效果不错。 一个小项目要使用google map作为主要展示方式,在地图上展示世界某发展现状。虽然原来使用过google map,但还是花了两天时间才将主要的地图...

    DTeam 评论0 收藏0
  • vue封装element-uitable组件,灵活配置表头实现表格内编辑,按钮,链接等功能。

    摘要:一封装的组件定义表格高度全屏增加前台分页功能。表格内编辑后,自动选中该行。单元格内数据样式单元格内按钮,可多个。触发组件绑定函数,参数按钮名称,按钮样式,按钮事件标识。单元格是否可点击的判断函数,可进行复杂的函数判断。 vue-bxz-table 一、封装element-ui的table组件: 定义表格高度全屏 增加前台分页功能。 自定义表头,循环输出整体表结构。 表格内编辑(输入框...

    henry14 评论0 收藏0
  • 前端基础知识学习记录(二)

    摘要:无序列表无序列表是一个项目的列表,此列项目使用粗体圆点典型的小黑圆圈进行标记。可以取值为实心黑圆点空心圆点实心黑方点。有序列表有序列表同样也是一列项目,列表项目使用数字进行标记。自定义列表自定义列表是项目及其注释的组合。 前端基础知识学习记录(二) 1、HTML 输入类型 元素的输入类型: 1、定义供文本输入的单行输入字段; 2、定义密码字段(password字段中的字符会被做掩码处理...

    Vultr 评论0 收藏0
  • 【译】原生表单组件

    摘要:文本输入框文本输入框是最基本的表单组件,它便于用户输入各种数据。对大多数表单组件而言,表单提交后所有具有属性的组件都会被提交,即使它们没有获值。重置按钮用于重置所有表单组件为默认值。 系列文章说明 原文 HTML表单是由组件构成的,这些组件是各种浏览器都支持的内置控件。本文中我们将深入探讨它们、了解它们的作用、学习如何让各种浏览器更好地支持它们。 虽然这里我们只探讨内建表单组件,但...

    sunnyxd 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<