一款方便车牌号输入的键盘和文本框

Demo点此(Swift):https://pan.baidu.com/s/1qXG6nkK

1.显示自定义文本框,TouchDown代理告诉控制器应

该显示自定义的键盘了.

    /// 车牌号 文本框 (自定义)
    let carNumberContentButton = XNInputCarNumebrButton();

    /// 车牌号 文本框
        addSubview(carNumberContentButton);
        
        carNumberContentButton.sd_layout()
            .topEqualToView(carNumberLabel)
            .leftSpaceToView(carNumberLabel,0)
            .rightSpaceToView(self,space)
            .heightIs(rowHeight);
        
        carNumberContentButton.updateLayout();
        
        // 加载里面的内容
        carNumberContentButton.inputCarNumebrViewLoadContent();
        
        // 添加事件
        carNumberContentButton.addTarget(self, action: #selector(XNEditCarContentView.clickShowKeyboard), forControlEvents: .TouchDown);


// MARK:
// MARK: 事件
extension <#XNEditCarContentView#> {
    
    // MARK:
    // MARK: 点击弹出文本框
    /// 点击弹出文本框
    @objc private func clickShowKeyboard() {
        
        delegate?.delegateShowKeyboard();
        
    }
}

        //实现代理方法调用此段代码 显示键盘
        keyboardViewShowOrHidden(true);

2.创建自定义的键盘

    /// 自定义的键盘View
    private let keyboardView = XNKeyboardView();

        // 实例化键盘
        initKeyboardView();


    // MARK:
    // MARK: 创建键盘
    /// 创建键盘
    private func initKeyboardView() {
        
        // 创建键盘View
        view.addSubview(keyboardView);
        
        keyboardView.frame = CGRectMake(0, UIScreen.mainScreen().bounds.height, UIScreen.mainScreen().bounds.width, 216);
        
        // 设置代理
        keyboardView.xnKeyboardViewDelegate = self;
        
        // 加载内容
        keyboardView.xnKeyboardViewLoadContent();
        
        // 显示键盘
        keyboardViewShowOrHidden(true);
    }

 

3.键盘显示和隐藏

    // MARK:
    // MARK: 键盘的 出现和隐藏
    /// 键盘的 出现和隐藏 true 显示
    private func keyboardViewShowOrHidden(isShow: Bool) {
        
        // 为真 显示
        let y = isShow ? UIScreen.mainScreen().bounds.height - self.keyboardView.height : UIScreen.mainScreen().bounds.height;
        
        // 如果一样不需要做动画
        if keyboardView.y == y {
            
            return;
        }
        
        UIView.animateWithDuration(0.25) {
            
            self.keyboardView.y = y;
        }
        
    }

 

4.复制实现代理方法的逻辑

// MARK:
// MARK: 自定义键盘的 代理方法
extension <#XNEditCarViewController#>: XNKeyboardViewDelegate {
    
    // MARK:
    // MARK: 代理方法 监听点击 赋值
    func XNKeyboardViewMethod(title: String) {
        
        var number = 1;
        
        for i in <#contentView#>.<#carNumberContentButton车牌号文本框名#>.labelArray {
            
            // 当输入到最后一个的时候 让其不被删除 可以赋值
            if number == <#contentView#>.carNumberContentButton.labelArray.count {
                
                i.text = title;
                
                return;
                
            }
            
            if i.text == nil {
                
                i.text = title;
                
                return;
            }
            
            number += 1;
        }
        
        
    }
    
    
    // MARK:
    // MARK: 代理方法 删除
    /// 代理方法 删除
    func XNKeyboardViewDeleteMethod() {
        
        // 递减操作
        for i in <#contentView#>.<#carNumberContentButton车牌号文本框名#>.labelArray.reverse() {
            
            // 判断是不是中文
            if i.text?.xnIsChinese() == true {
                
                // 删除字符
                i.text = nil;
                
                //  显示出 汉字键盘
                keyboardView.keyboardViewToNumberAndGrapheme.alpha = 0;
                
                return;
            }
            
            if i.text != nil {
                
                i.text = nil;
                
                return;
            }
            
        }
        
        
    }
    
    // MARK:
    // MARK: 点击了对勾
    func XNKeyboardViewRightMethod() {
        
        // 文本框的隐藏
        keyboardViewShowOrHidden(false);
    }
}

 

5.判断字符串是不是中文

#pragma mark - 判断字符串 是不是 全是中文
- (BOOL)xnIsChinese
{
    NSString *match = @"(^[\u4e00-\u9fa5]+$)";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF matches %@", match];
    return [predicate evaluateWithObject:self];
}

 

6.

    // MARK: 点击控制器的View调用
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        
        // 显示键盘
        keyboardViewShowOrHidden(false);
    }

 

7.获取到用户输入的车牌号

    /// 获取到用户输入的车名
    let newCarNumberName = XNTool.xnStringLoadCarNumberName(addCarContentView.inputCarNumebrButton.labelArray);

    // MARK:
    // MARK: 一个获取到 用户输入的车牌的 方法
    /// 一个获取到 用户输入的车牌的 方法
    class func xnStringLoadCarNumberName(labelArray: [UILabel]) -> String? {
        
        var carNumberName = String();
        
        // 遍历label
        for i in labelArray {
            
            if i.text == nil {
                
                // 出现 屏幕中间 时间自己定
                JRToast.showWithText("请确认您车牌号输入完整", duration:XNTool().messageContinueTime);
                
                return nil;
            }
            
            carNumberName += i.text!;
            
        }
        
        return carNumberName;
    }

 

8.把字符串 输入到车牌文本框中

// MARK:
    // MARK: 一个把字符串 输入到车牌文本框的方法
    /// 一个把字符串 输入到车牌文本框的方法
    class func xnStringToTextField(labelArray: [UILabel],defaultString: String) {
        
        var number = 0;
        
        for i in defaultString.characters {
            
            labelArray[number].text = String(i);
            
            number += 1;
            
        }
  
    }

 

9.显示字母键盘,在创建键盘的时候

        // 有默认值 所以显示字母键盘
        keyboardView.keyboardViewToNumberAndGrapheme.alpha = 1;

中国34个省级行政区,

其中没有代表澳门的车牌,

贵州省有二个名字,所以数组长度34

        
        /// 中国33个省级行政区 其中有一个 有二种名称
        let arrayProvincialAdministrativeRegion = [
            
            "京",
            "沪",
            "津",
            "渝",
            "黑",
            "吉",
            "辽",
            "蒙",
            "冀",
            "新",
            "甘",
            "青",
            "陕",
            "宁",
            "豫",
            "鲁",
            "晋",
            "皖",
            "鄂",
            "湘",
            "苏",
            "川",
            "贵", //贵州省
            "黔", //贵州省
            "滇",
            "桂",
            "藏",
            "浙",
            "赣",
            "粤",
            "闽",
            "台",
            "琼",
            "港",
            
            ];

 

转载于:https://my.oschina.net/codeismygirl/blog/699687

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值