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

花荣
• 阅读 2618

控件功能:

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

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

控件实现

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

代码

代码最直接了
.h文件

#import <UIKit/UIKit.h>

@class NumberSelectView;

@protocol NumberSelectViewDelegate <NSObject>

-(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<NumberSelectViewDelegate> 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方法里写具体事件。

点赞
收藏
评论区
推荐文章
Souleigh ✨ Souleigh ✨
4年前
34 个 JavaScript 代码优化技巧
1. 含有多个条件的if语句我们可以在数组中存储多个值,并且可以使用数组的includes方法。//longhandif (x  'abc' || x  'def' || x  'ghi' || x 'jkl') {    //logic}//shorthandif ('abc', 'def
Wesley13 Wesley13
4年前
Unity XLua 官方案例学习
1\.Helloworld1usingUnityEngine;2usingXLua;34publicclassHelloworld:MonoBehaviour{5//Usethisforinitialization
Wesley13 Wesley13
4年前
Java日期时间API系列34
  通过Java日期时间API系列9Jdk8中java.time包中的新的日期时间API类的Period和Duration的区别(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Fxkzhangsanx%2Fp%2F12110137.html)
Stella981 Stella981
4年前
OKHttp源码学习
1.HttpURLConnection1publicclassHttpURLConnectionGetAndPost{2privateStringurlAddress"xxxx";34publicvoiddoGet(Stringmethod,Strings)
Stella981 Stella981
4年前
Scrapy中间件user
一、定义实现随机UserAgent的下载中间件1.在middlewares.py中完善代码1importrandom2fromTencent.settingsimportUSER_AGENTS_LIST注意导入路径,请忽视pycharm的错误提示34cla
Stella981 Stella981
4年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Wesley13 Wesley13
4年前
JAVA的接口
用法:1interfaceA{2publicstaticfinalinti10;34publicvoidrunLoad();5}67publicclassDemoimplementsA{8/
Stella981 Stella981
4年前
OS X Mavericks 10.9.5 (13F34) bt下载地址
OSXMavericks10.9.5(13F34),源http://bitsnoop.com/osxmavericks109513f34dmgq68447977.html磁力链magnet:?xturn:btih:4c887e73cd37228d8dc0746315501edc289acc51&dnOS%20X%2
Stella981 Stella981
4年前
Leet Code 74 Search a 2D Matrix
写一个高效的算法,在m×n的二维矩阵中搜索一个值。矩阵有以下性质:每一行从左到右为升序。每一行的第一个数都比上一行最后一个数大。例如,有以下矩阵:\  \1,  3, 5, 7\,  \10,11,16,20\,  \23,30,34,50\\给定target3,返
Wesley13 Wesley13
4年前
ES6之路第三篇:字符串的扩展
字符的Unicode表示法1"\u{20BB7}"2//"𠮷"34"\u{41}\u{42}\u{43}"5//"ABC"67lethello123;8hell\u{6F}//123910'\u{
Wesley13 Wesley13
4年前
34.TCP取样器
阅读文本大概需要3分钟。1、TCP取样器的作用   TCP取样器作用就是通过TCP/IP协议来连接服务器,然后发送数据和接收数据。2、TCP取样器详解!(https://oscimg.oschina.net/oscnet/32a9b19ba1db00f321d22a0f33bcfb68a0d.png)TCPClien