文档章节

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

阴雨音语
 阴雨音语
发布于 2016/06/23 10:24
字数 835
阅读 1822
收藏 3

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 = [
            
            "京",
            "沪",
            "津",
            "渝",
            "黑",
            "吉",
            "辽",
            "蒙",
            "冀",
            "新",
            "甘",
            "青",
            "陕",
            "宁",
            "豫",
            "鲁",
            "晋",
            "皖",
            "鄂",
            "湘",
            "苏",
            "川",
            "贵", //贵州省
            "黔", //贵州省
            "滇",
            "桂",
            "藏",
            "浙",
            "赣",
            "粤",
            "闽",
            "台",
            "琼",
            "港",
            
            ];

 

© 著作权归作者所有

共有 人打赏支持
阴雨音语
粉丝 55
博文 294
码字总数 43486
作品 0
东城
程序员
私信 提问
加载中

评论(3)

阴雨音语
阴雨音语

引用来自“温柔的键盘侠”的评论

0澳门独立了
不太
阴雨音语
阴雨音语

引用来自“温柔的键盘侠”的评论

0澳门独立了
不填清楚这些事情~~
温柔的键盘侠
0澳门独立了
从零开始(4)

( 202 ) 修改tabbar背景颜色 详情请点此 ( 201 ) TextField代理 详情请点此 ( 200 ) UIAcivityViewController显示中文 详情请点此 ( 199 ) 用UIAcivityViewController分享图片 详情请点此 ( ...

阴雨音语
2016/06/16
18
0
ChemDraw中怎么打出符号π

很多人日常使用ChemDraw是一款非常优秀的化学绘图软件,在其绘制化学结构式或者反应式的过程中,常常需要添加各种符号。比如有的用户会需要输入希腊字符π,但是不知道用什么方法添加。本教程...

学术研究软件
2016/06/15
18
0
键盘快捷键--jKey

jKey 是另一个非常有用的 JavaScript 快捷键库,用来处理键盘事件。它使用 jQuery,所以可以选择任何可用的元素来设置快捷键命令。基本上,任何元素,比如一个输入框或者文本框,都会有一款适...

叶秀兰
2014/02/28
336
0
怎么用几何画板制作立体阴影效果文字

做为很多的数学老师都喜爱的一款教学辅助软件,几何画板的作图和演示功能是非常强大的,不论是静态图还是动态图都可以制作。但是它对文字的处理上就不是那么强了,有些老师希望可以给文字加上...

学术研究软件
2016/06/24
13
0
设计iOS中随系统键盘弹收和内容文字长度自适应高度的文本框

设计iOS中随系统键盘弹收和内容文字长度自适应高度的文本框 文本输入框是多数与社交相关的app中不可或缺的一个控件,这些文本输入框应该具备如下的功能: 1.在键盘为弹起时,输入框悬浮在界面...

珲少
2016/03/23
466
0

没有更多内容

加载失败,请刷新页面

加载更多

slot分发内容

slot元素作为组件模板之中的内容分发插槽。这个元素自身将被替换。 有 name 特性的 slot 称为具名 slot。 有 slot 特性的内容将分发到名字相匹配的具名 slot。 内容分发就是指混合父组件的内...

Carbenson
16分钟前
1
0
python开发入门

1.执行python文件 # python ./demo.py 2.Python ImportError: No module named 'requests'异常 解决方法: # pip install requests;...

硅谷课堂
17分钟前
1
0
官宣,PyTorch 1.0 稳定版本现已推出

简评:快来一起快乐地学习吧。 随着 PyTorch 生态系统和社区继续为开发人员提供有趣的新项目和教育资源,今天(12 月 7日)在 NeurIPS 会议上发布了 PyTorch 1.0 稳定版。研究人员和工程师现...

极光推送
31分钟前
1
0
对比理解adr,ldr指令

很多人在写简单的裸机代码或分析uboot时,常常遇到adr ldr指令。却分不清这2者的区别,今天就来谈谈adr与ldr指令。 参照韦老师的代码和Makefile写了test_adr.S: .text .globl _start _start...

天王盖地虎626
42分钟前
3
0
将spring boot 项目注册为Linux的服务

springboot 注册为Linux系统服务 springboot 注册为Linux系统服务

miaojiangmin
43分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部