文档章节

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

阴雨音语
 阴雨音语
发布于 2016/06/23 10:24
字数 835
阅读 1794
收藏 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
7个提高 TextArea 操作性能的 jQuery 插件

默认状态下的Textarea文本的功能确实有限,它甚至不能支持常用的HTML代码,所以,在多数情况下,我们通过其他控件或别的办法来增强Textarea的可操作性,以下就是7个跟提高Textarea操作性能相...

红薯
2011/08/25
3.4K
4

没有更多内容

加载失败,请刷新页面

加载更多

区块链入门教程以太源码分析accounts包简介

兄弟连区块链教程以太源码分析accounts包简介 accounts包实现了eth客户端的钱包和账户管理。 账号的数据结构: typeAccount struct {Address common.Address `json:"address"` // Ether...

兄弟连区块链入门教程
27分钟前
4
0
sed命令详解及运用

10月17日任务 9.4/9.5 sed 9.3、正则介绍 - sed命令(上) sed是流编辑器,默认不编辑源文件,是以行为单位从源文件抽取数据,进而处理再输出于屏幕上;可能有的人说那我直接vi不就好了嘛,但...

zgxlinux
29分钟前
2
0
iOS App “去评分” 功能的几种实现总结

通常 App 都会在它的设置页面或者关于页面添加一个“去评分”选项,或者在用户使用 App 过程中适当时机弹窗,引导用户跳转到 App Store 对当前 App 进行评分或者撰写评论。 绝大部分 App 实现...

秦无炎
34分钟前
1
0
Chrome 图片解码与 Image Decoding Hint

我在之前的一篇文章Chrome 图片解码与 Image.decode API,说明了为什么图片解码可能会导致非合成器动画的阻塞和如何使用 Image.decode API 来避免动画的阻塞。不过虽然 Image.decode API 给页...

全部原谅
34分钟前
0
0
java获取ip和地区

String s = HttpUtil.sendPost("http://pv.sohu.com/cityjson");JSONObject jsonObject = JSONObject.parseObject(s.substring(s.indexOf("{"), s.indexOf("}") + 1));jsonObject.get("c......

吴伟祥
36分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部