• iOS,文本输入,键盘相关


    1.UIKeyboard键盘相关知识点

    2.点击空白区域隐藏键盘(UIKeyboard)

    3.键盘(UIKeyboard)挡住输入框处理

    4.自定义键盘(UIKeyboard) 

    5.监听键盘弹出或消失消息

    6.UITextField和UITableView自定义下拉列表框

    7.使用UIPickerView在UITextField实现滚动选择

    8.使用UIDatePicker在UITextField实现日期选择

    9.设置文本输入框样式

    UIKeyboard键盘相关知识点

    一、键盘风格

    UIKit框架支持8种风格键盘。

    typedef enum {
      UIKeyboardTypeDefault, // 默认键盘:支持所有字符
      UIKeyboardTypeASCIICapable, // 支持ASCII的默认键盘
      UIKeyboardTypeNumbersAndPunctuation, // 标准电话键盘,支持+*#等符号
      UIKeyboardTypeURL, // URL键盘,有.com按钮;只支持URL字符
      UIKeyboardTypeNumberPad, //数字键盘
      UIKeyboardTypePhonePad, // 电话键盘
      UIKeyboardTypeNamePhonePad, // 电话键盘,也支持输入人名字
      UIKeyboardTypeEmailAddress, // 用于输入电子邮件地址的键盘
    } UIKeyboardType;

    用法用例:textView.keyboardtype = UIKeyboardTypeNumberPad;

    二、键盘外观

    typedef enum {
      UIKeyboardAppearanceDefault, // 默认外观:浅灰色
      UIKeyboardAppearanceAlert, //深灰/石墨色
    } UIKeyboardAppearance;

    用法用例:textView.keyboardAppearance=UIKeyboardAppearanceDefault;

    三、回车键

    typedef enum {
      UIReturnKeyDefault, //默认:灰色按钮,标有Return
      UIReturnKeyGo, //标有Go的蓝色按钮
      UIReturnKeyGoogle, //标有Google的蓝色按钮,用于搜索
      UIReturnKeyJoin, //标有Join的蓝色按钮
      UIReturnKeyNext, //标有Next的蓝色按钮
      UIReturnKeyRoute, //标有Route的蓝色按钮
      UIReturnKeySearch, //标有Search的蓝色按钮
      UIReturnKeySend, //标有Send的蓝色按钮
      UIReturnKeyYahoo, //标有Yahoo!的蓝色按钮,用于搜索
      UIReturnKeyDone, //标有Done的蓝色按钮
      UIReturnKeyEmergencyCall, //紧急呼叫按钮
    } UIReturnKeyType;

    用法用例:textView.returnKeyType=UIReturnKeyGo;

    四、自动大写

    typedef enum {
      UITextAutocapitalizationTypeNone, //不自动大写
      UITextAutocapitalizationTypeWords, //单词首字母大写
      UITextAutocapitalizationTypeSentences, //句子首字母大写
      UITextAutocapitalizationTypeAllCharacters, //所有字母大写
    } UITextAutocapitalizationType;

    用法用例:textField.autocapitalizationType = UITextAutocapitalizationTypeWords;

    五、自动更正

    typedef enum {
      UITextAutocorrectionTypeDefault,//默认
      UITextAutocorrectionTypeNo,//不自动更正
      UITextAutocorrectionTypeYes,//自动更正
    } UITextAutocorrectionType;

    用法用例:textField.autocorrectionType = UITextAutocorrectionTypeYes;

    六、安全文本输入

    textView.secureTextEntry=YES;

    开启安全输入主要是用于密码或一些私人数据的输入,此时会禁用自动更正和自此缓存。

    //点击回车键的回调

    UITextFieldDelegate
    
    -(BOOL)textFieldShouldReturn:(UITextField *)textField{
        return YES;
    }

    点击空白区域隐藏键盘(UIKeyboard)  

    //结束触摸
    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
        //isExclusiveTouch一个布尔值来指示接收机处理触摸事件。
        //没有触摸_textUser进入if内操作
        if (![_textUser isExclusiveTouch]) {
            //resignFirstResponder取消第一响应者状态的。如果对textfield使用的话,那么调用这个方法,textfield的第一响应者状态就会取消,然后键盘就消失了。
            [_textUser resignFirstResponder];
        }
    }

     //或者

    //结束触摸
    -(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
     [self.view endEditing:YES];//收回键盘
    }

    键盘(UIKeyboard)挡住输入框处理  

    //需要处理输入框被键盘挡住的.h文件,遵守UITextFieldDelegate协议

    #import <UIKit/UIKit.h>
    #import "MyKeyboard.h"
    @interface Test2ViewController : UIViewController<MykeyBoardDelegate,UITextFieldDelegate>
    @end

     

    //需要处理输入框被键盘挡住的.m文件,实现UITextFieldDelegate协议方法

     //实现委托
      _textUser.tag=1;
      _textUser.delegate=self;
      _textPwd.tag=2;
      _textPwd.delegate=self;

    //选中开始编辑文本框内容

    -(void)textFieldDidBeginEditing:(UITextField *)textField{
         _textTag=textField.tag;
        //根据tag判断这个键盘是否是被遮住的键盘
        if (_textTag==2) {
            //将界面上移避免文本框被键盘挡住
            CGRect frame = self.view.frame;
            frame.origin.y -=200;
            frame.size.height +=200;
            self.view.frame = frame;
        }
    }

    //结束编辑文本框内容

    -(void)textFieldDidEndEditing:(UITextField *)textField{
        //根据tag判断这个键盘是否是被遮住的键盘
        if (_textTag==2) {
            CGRect frame=self.view.frame;
            frame.origin.y+=200;
            frame.size.height-=200;
            self.view.frame=frame;
       } 
    }

    自定义键盘(UIKeyboard)

    //MyKeyboard.h文件(自定义键盘)

    #import <UIKit/UIKit.h>
    @protocol MykeyBoardDelegate<NSObject>
    //文本框值输入委托
    -(void)myKeyBoardInput:(NSString *)inputString;
    //删除文本框字委托
    -(void)myKeyBoardBack;
    //隐藏键盘委托
    -(void)myKeyBoardOK;
    @end
    
    @interface MyKeyboard : UIView
    @property (nonatomic,weak) id<MykeyBoardDelegate> delegate;//声明一个委托变量
    @end
    //MyKeyboard.m文件(自定义键盘)
    //
    //  MyKeyboard.m
    //  GGTabBarDemo
    //
    //  Created by Vie on 15/7/23.
    //  Copyright (c) 2015年 Vie. All rights reserved.
    //
    
    #import "MyKeyboard.h"
    
    @implementation MyKeyboard
    
    -(id)initWithFrame:(CGRect)frame{
        
        self=[super initWithFrame:frame];
        if (self) {
            self.bounds=CGRectMake(0, 0, frame.size.width, frame.size.height);
            //第一横排键盘
            UIButton *button600=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.005, 0, frame.size.width*0.19, frame.size.height*0.24)];
            [button600.layer setCornerRadius:2.0];
            [button600.layer setBorderWidth:0.5];
            [button600 setBackgroundColor:[UIColor whiteColor]];
            [button600 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button600 setTitle:@"600" forState:UIControlStateNormal];
            [button600 addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button600];
            
            UIButton *button1=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.2, 0, frame.size.width*0.19, frame.size.height*0.24)];
            [button1.layer setCornerRadius:2.0];
            [button1.layer setBorderWidth:0.5];
            [button1 setBackgroundColor:[UIColor whiteColor]];
            [button1 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button1 setTitle:@"1" forState:UIControlStateNormal];
            [button1 addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button1];
            
            UIButton *button2=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.4, 0, frame.size.width*0.19, frame.size.height*0.24)];
            [button2.layer setCornerRadius:2.0];
            [button2.layer setBorderWidth:0.5];
            [button2 setBackgroundColor:[UIColor whiteColor]];
            [button2 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button2 setTitle:@"2" forState:UIControlStateNormal];
            [button2 addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button2];
            
            UIButton *button3=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.6, 0, frame.size.width*0.19, frame.size.height*0.24)];
            [button3.layer setCornerRadius:2.0];
            [button3.layer setBorderWidth:0.5];
            [button3 setBackgroundColor:[UIColor whiteColor]];
            [button3 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button3 setTitle:@"3" forState:UIControlStateNormal];
            [button3 addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button3];
            
            
            UIButton *buttonX=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.8, 0, frame.size.width*0.19, frame.size.height*0.24)];
            [buttonX.layer setCornerRadius:2.0];
            [buttonX.layer setBorderWidth:0.5];
            [buttonX setBackgroundColor:[UIColor whiteColor]];
            [buttonX setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [buttonX setTitle:@"X" forState:UIControlStateNormal];
            [buttonX addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:buttonX];
            //第二横排键盘
            UIButton *button601=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.005, frame.size.height*0.25, frame.size.width*0.19, frame.size.height*0.24)];
            [button601.layer setCornerRadius:2.0];
            [button601.layer setBorderWidth:0.5];
            [button601 setBackgroundColor:[UIColor whiteColor]];
            [button601 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button601 setTitle:@"601" forState:UIControlStateNormal];
            [button601 addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button601];
            
            UIButton *button4=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.2, frame.size.height*0.25, frame.size.width*0.19, frame.size.height*0.24)];
            [button4.layer setCornerRadius:2.0];
            [button4.layer setBorderWidth:0.5];
            [button4 setBackgroundColor:[UIColor whiteColor]];
            [button4 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button4 setTitle:@"4" forState:UIControlStateNormal];
            [button4 addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button4];
            
            UIButton *button5=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.4, frame.size.height*0.25, frame.size.width*0.19, frame.size.height*0.24)];
            [button5.layer setCornerRadius:2.0];
            [button5.layer setBorderWidth:0.5];
            [button5 setBackgroundColor:[UIColor whiteColor]];
            [button5 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button5 setTitle:@"5" forState:UIControlStateNormal];
            [button5 addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button5];
            
            UIButton *button6=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.6, frame.size.height*0.25, frame.size.width*0.19, frame.size.height*0.24)];
            [button6.layer setCornerRadius:2.0];
            [button6.layer setBorderWidth:0.5];
            [button6 setBackgroundColor:[UIColor whiteColor]];
            [button6 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button6 setTitle:@"6" forState:UIControlStateNormal];
            [button6 addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button6];
            
            UIButton *button002=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.8, frame.size.height*0.25, frame.size.width*0.19, frame.size.height*0.24)];
            [button002.layer setCornerRadius:2.0];
            [button002.layer setBorderWidth:0.5];
            [button002 setBackgroundColor:[UIColor whiteColor]];
            [button002 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button002 setTitle:@"002" forState:UIControlStateNormal];
            [button002 addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button002];
            //第三横排键盘
            UIButton *button000=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.005, frame.size.height*0.5, frame.size.width*0.19, frame.size.height*0.24)];
            [button000.layer setCornerRadius:2.0];
            [button000.layer setBorderWidth:0.5];
            [button000 setBackgroundColor:[UIColor whiteColor]];
            [button000 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button000 setTitle:@"000" forState:UIControlStateNormal];
            [button000 addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button000];
            
            UIButton *button7=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.2, frame.size.height*0.5, frame.size.width*0.19, frame.size.height*0.24)];
            [button7.layer setCornerRadius:2.0];
            [button7.layer setBorderWidth:0.5];
            [button7 setBackgroundColor:[UIColor whiteColor]];
            [button7 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button7 setTitle:@"7" forState:UIControlStateNormal];
            [button7 addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button7];
            
            UIButton *button8=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.4, frame.size.height*0.5, frame.size.width*0.19, frame.size.height*0.24)];
            [button8.layer setCornerRadius:2.0];
            [button8.layer setBorderWidth:0.5];
            [button8 setBackgroundColor:[UIColor whiteColor]];
            [button8 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button8 setTitle:@"8" forState:UIControlStateNormal];
            [button8 addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button8];
            
            UIButton *button9=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.6, frame.size.height*0.5, frame.size.width*0.19, frame.size.height*0.24)];
            [button9.layer setCornerRadius:2.0];
            [button9.layer setBorderWidth:0.5];
            [button9 setBackgroundColor:[UIColor whiteColor]];
            [button9 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button9 setTitle:@"9" forState:UIControlStateNormal];
            [button9 addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button9];
            
            UIButton *button300=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.8, frame.size.height*0.5, frame.size.width*0.19, frame.size.height*0.24)];
            [button300.layer setCornerRadius:2.0];
            [button300.layer setBorderWidth:0.5];
            [button300 setBackgroundColor:[UIColor whiteColor]];
            [button300 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button300 setTitle:@"300" forState:UIControlStateNormal];
            [button300 addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button300];
            
            //第四横排键盘
            
            UIButton *button0=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.2, frame.size.height*0.75, frame.size.width*0.19, frame.size.height*0.24)];
            [button0.layer setCornerRadius:2.0];
            [button0.layer setBorderWidth:0.5];
            [button0 setBackgroundColor:[UIColor whiteColor]];
            [button0 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button0 setTitle:@"0" forState:UIControlStateNormal];
            [button0 addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button0];
            
            UIButton *buttonPoint=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.4, frame.size.height*0.75, frame.size.width*0.19, frame.size.height*0.24)];
            [buttonPoint.layer setCornerRadius:2.0];
            [buttonPoint.layer setBorderWidth:0.5];
            [buttonPoint setBackgroundColor:[UIColor whiteColor]];
            [buttonPoint setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [buttonPoint setTitle:@"." forState:UIControlStateNormal];
            [buttonPoint addTarget:self action:@selector(inputAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:buttonPoint];
            
            UIButton *buttonOK=[[UIButton alloc] initWithFrame:CGRectMake(frame.size.width*0.6, frame.size.height*0.75, frame.size.width*0.19, frame.size.height*0.24)];
            [buttonOK.layer setCornerRadius:2.0];
            [buttonOK.layer setBorderWidth:0.5];
            [buttonOK setBackgroundColor:[UIColor whiteColor]];
            [buttonOK setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [buttonOK setTitle:@"确定" forState:UIControlStateNormal];
            [buttonOK addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:buttonOK];
            
            
        }
        return self;
    
    }
    
    -(void)inputAction:(UIButton *)sender{
        [self.delegate myKeyBoardInput:[sender currentTitle]];
    }
    -(void)backAction:(UIButton *)sender{
        if ([[sender currentTitle] isEqualToString:@"确定"]) {
            [self.delegate myKeyBoardOK];
        }else if ([[sender currentTitle] isEqualToString:@"X"]){
            [self.delegate myKeyBoardBack];
        }
        
    }
    @end

    //Test2ViewController.h文件,需要用到自定义软件盘的文本框

    #import <UIKit/UIKit.h>
    
    #import "MyKeyboard.h"
    
    @interface Test2ViewController : UIViewController<MykeyBoardDelegate,UITextFieldDelegate>
    
     
    
    @end

    //Test2ViewController.m文件,需要用到自定义软件盘的文本框

    //
    //  Test2ViewController.m
    //  
    //
    //  Created by Vie on 15/7/22.
    //
    //
    
    #import "Test2ViewController.h"
    #import "MyKeyboard.h"
    @interface Test2ViewController ()
    @property (nonatomic,strong) UITextField *textUser,*textPwd;
    @property (nonatomic) int textTag;
    @end
    
    @implementation Test2ViewController
    @synthesize textUser=_textUser,textPwd=_textPwd,textTag=_textTag;
    - (void)viewDidLoad {
        [super viewDidLoad];
        [self.view setBackgroundColor:[UIColor whiteColor]];
        self.parentViewController.navigationItem.title = @"2";
    
        //设置标题
        self.navigationItem.title = @"登陆";
        
        //修改导航栏背景色
        [self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:30/255.0 green:144/255.0 blue:255/255.0 alpha:0.5]];
        //设置标题颜色字体大小
        [self.navigationController.navigationBar setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:19],NSForegroundColorAttributeName:[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1]}];
        //修改导航栏背景色
        [self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:30/255.0 green:144/255.0 blue:255/255.0 alpha:0.5]];
        //下一个视图的返回按钮文件会改变为下面设置的值
        UIBarButtonItem *returnButtonItem = [[UIBarButtonItem alloc] init];
        returnButtonItem.title = @"";
        self.navigationItem.backBarButtonItem = returnButtonItem;
        //用户名输入文本框
        _textUser=[[UITextField alloc] initWithFrame:CGRectMake(self.view.frame.size.width*0.1, self.view.frame.size.height*0.2, self.view.frame.size.width*0.8, self.view.frame.size.height*0.08)];
        [_textUser setBackgroundColor:[UIColor whiteColor]];
        [_textUser.layer setCornerRadius:5.0];
        [_textUser setPlaceholder:@"用户名"];
        [_textUser.layer setBorderWidth:1];
        //初始化自定义键盘
        MyKeyboard *myKboard=[[MyKeyboard alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height*0.3)];
        //引用自定义键盘
        _textUser.inputView=myKboard;
        //委托
        myKboard.delegate=self;
        _textUser.tag=1;
        _textUser.delegate=self;
       
    
        [self.view addSubview:_textUser];
        
        //密码输入文本框
        _textPwd=[[UITextField alloc] initWithFrame:CGRectMake(self.view.frame.size.width*0.1, self.view.frame.size.height*0.8, self.view.frame.size.width*0.8, self.view.frame.size.height*0.08)];
        [_textPwd setBackgroundColor:[UIColor whiteColor]];
        [_textPwd.layer setCornerRadius:5.0];
        [_textPwd setPlaceholder:@"密码"];
        [_textPwd.layer setBorderWidth:1];
        _textPwd.inputView=myKboard;
        _textPwd.tag=2;
        _textPwd.delegate=self;
        //响应文本框选中更改
        
        [self.view addSubview:_textPwd];
        
        
    }
    //选中开始编辑文本框内容
    -(void)textFieldDidBeginEditing:(UITextField *)textField{
         _textTag=textField.tag;
        //根据tag判断这个键盘是否是被遮住的键盘
        if (_textTag==2) {
            //将界面上移避免文本框被键盘挡住
            CGRect frame = self.view.frame;
            frame.origin.y -=200;
            frame.size.height +=200;
            self.view.frame = frame;
        }
        
        
    }
    //结束编辑文本框内容
    -(void)textFieldDidEndEditing:(UITextField *)textField{
        //根据tag判断这个键盘是否是被遮住的键盘
          if (_textTag==2) {
        CGRect frame=self.view.frame;
        frame.origin.y+=200;
        frame.size.height-=200;
        self.view.frame=frame;
     }
    }
    
    //键盘输入实现
    -(void)myKeyBoardInput:(NSString *)inputString{
        //点击的是用户名文本框时
        if (_textTag==1) {
            self.textUser.text=[self.textUser.text stringByAppendingString:inputString];
        }else if(_textTag==2){
            self.textPwd.text=[self.textPwd.text stringByAppendingString:inputString];
        
        }
        
    
    }
    //键盘删除实现
    -(void)myKeyBoardBack{
        if (_textTag==1) {
            if (self.textUser.text.length>0) {
                self.textUser.text=[self.textUser.text substringToIndex:self.textUser.text.length-1];
            }
        }else if (_textTag==2){
            if (self.textPwd.text.length>0) {
                self.textPwd.text=[self.textPwd.text substringToIndex:self.textPwd.text.length-1];
            }
        }
        
    }
    //隐藏键盘实现
    -(void)myKeyBoardOK{
     if (_textTag==1) {
          [_textUser resignFirstResponder];
     }else if (_textTag==2){
          [_textPwd resignFirstResponder];
     }
    }
    //结束触摸
    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
        //isExclusiveTouch一个布尔值来指示接收机处理触摸事件。
        //没有触摸_textUser进入if内操作
        if (![_textUser isExclusiveTouch]) {
            //resignFirstResponder取消第一响应者状态的。如果对textfield使用的话,那么调用这个方法,textfield的第一响应者状态就会取消,然后键盘就消失了。
            [_textUser resignFirstResponder];
        }
        if (![_textPwd isExclusiveTouch]) {
            //resignFirstResponder取消第一响应者状态的。如果对textfield使用的话,那么调用这个方法,textfield的第一响应者状态就会取消,然后键盘就消失了。
            [_textPwd resignFirstResponder];
        }
    }
    
    @end

    //效果

     

    监听键盘弹出或消失消息 

    //键盘弹出

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardChanged:) name:UIKeyboardWillChangeFrameNotification object:nil];

    //键盘消失

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardWillHide:) name:UIKeyboardWillHideNotification object:nil];
    //监听键盘弹出方法
    -(void)keyBoardChanged:(NSNotification *)notification{
        //UIKeyboardFrameEndUserInfoKey  将要变化的大小
        CGRect keyBoardRect=[notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
        keyBoardHeight=keyBoardRect.size.height;//获取弹出键盘高度
       //键盘弹出时间
       NSTimeInterval time=[notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
      //下面可以做文本输入框坐标改变动画,与键盘弹出耗费时间一致(体验比较好)
        [UIView animateWithDuration:time animations:^{
            //self.view.frame=changeFrame;
        }];
    }
    
    //监听键盘消失方法
    -(void)keyBoardWillHide:(NSNotification *)notification{
      //键盘弹出时间
        NSTimeInterval time=[notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
       //下面可以做文本输入框坐标改变动画,与键盘弹出耗费时间一致(体验比较好)
        [UIView animateWithDuration:time animations:^{
            //self.view.frame=changeFrame;
        }];
    }

      

    UITextField和UITableView自定义下拉列表框

    //效果图:

    iOS UITextField和UITableView自定义下拉列表框 - Vie - Vie

    //DownboxViewController.h文件

    #import <UIKit/UIKit.h>
    #import "CommboxView.h"
     
    @interface DownboxViewController : UIViewController
    @property (nonatomic,strong) CommboxView *cbView;
    @

    //DownboxViewController.m文件

    #import "DownboxViewController.h"
    @interface DownboxViewController ()
    
    @end
    
    @implementation DownboxViewController
    - (void)viewDidLoad {
        [super viewDidLoad];
        [self.view setBackgroundColor:[UIColor whiteColor]];
        
        //1、创建视图
        CGFloat yyX = 40;
        CGFloat yyY = 40;
        CGFloat yyW = self.view.frame.size.width-80;
        CGFloat yyH = 100;
        CommboxView *yy = [[CommboxView alloc] initWithFrame:CGRectMake(yyX, yyY, yyW, yyH)];
        
    
        //2、完成布局
        [self.view addSubview:yy];
        
        //3、赋值成员变量
        self.cbView = yy;
        self.cbView.textField.placeholder=@"请选择";
     
       //设置数据
       self.cbView.tbArray=[[NSArray alloc] initWithObjects:@"风继续吹",@"真的爱你",@"透明的你",@"爱的太迟",@"Dear friends",@"永远不回头", nil];
    }
    
    //结束触摸时,隐藏下拉列表框
    -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
        //isExclusiveTouch一个布尔值来指示接收机处理触摸事件。
        //没有触摸_textUser进入if内操作
        if (![self.cbView.textField isExclusiveTouch]) {
            //resignFirstResponder取消第一响应者状态的。如果对textfield使用的话,那么调用这个方法,textfield的第一响应者状态就会取消,然后键盘就消失了。
            [self.cbView.textField resignFirstResponder];
            self.cbView.tbView.hidden=YES;
            //设置右边view
            self.cbView.textField.rightView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"login_textfield_more@2x.png"]];
        }
    }
    @end

    //CommboxView.h文件

    #import <UIKit/UIKit.h>
    @interface CommboxView : UIView<UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate>
    @property (nonatomic,strong) UITableView *tbView;//用作显示下拉列表框
    @property (nonatomic,strong) NSArray *tbArray;//用作下拉列表框的数据
    @property (nonatomic,strong) UITextField *textField;//文本框
    @end

    //CommboxView.m文件

    #import "CommboxView.h"
    @implementation CommboxView
    - (instancetype)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if ( self )
        {
            //1、创建视图
            CGFloat yyX = 0;
            CGFloat yyY = 0;
            CGFloat yyW = frame.size.width;
            CGFloat yyH = frame.size.height/2.5;
            UITextField *uiText=[[UITextField alloc] initWithFrame:CGRectMake(yyX, yyY, yyW, yyH)];
            [uiText.layer setCornerRadius:5.0 ];
            [uiText.layer setBorderWidth:1.0];
            //完成布局
            [self addSubview:uiText];
            uiText.delegate=self;
            //设置右边view
            uiText.rightView=[[UIImageView alloc] initWithImage:[UIImageimageNamed:@"login_textfield_more@2x.png"]];
            //设置右边样式总是显示
            uiText.rightViewMode = UITextFieldViewModeAlways;
            //赋值成员变量
            self.textField=uiText;
            //创建视图
            UITableView *uiTable=[[UITableView alloc] initWithFrame:CGRectMake(yyX, yyH, yyW, frame.size.height-yyY)];
            uiTable.backgroundColor=[UIColor grayColor];
            //分割线颜色
            uiTable.separatorColor=[UIColor lightGrayColor];
            [uiTable.layer setCornerRadius:5.0];
            //完成布局
            [self addSubview:uiTable];
            uiTable.dataSource=self;
            uiTable.delegate=self;
            uiTable.hidden=YES;
            //赋值成员变量
            self.tbView=uiTable;
        }
        return self;
    }
     
    //选中单元格操作
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{
        self.textField.text=[_tbArray objectAtIndex:indexPath.row];
        [self.textField resignFirstResponder];
        self.tbView.hidden=YES;
        //设置右边view
        self.textField.rightView=[[UIImageView alloc] initWithImage:[UIImageimageNamed:@"login_textfield_more@2x.png"]];
    }
    
    //开始编辑文本框时将下拉列表显示
    -(void)textFieldDidBeginEditing:(UITextField *)textField{
          //取消第一响应者状态,可以到达无焦点,不弹出键盘的效果
          [self.textField resignFirstResponder];
        self.tbView.hidden=NO;
        //设置右边view
        self.textField.rightView=[[UIImageView alloc] initWithImage:[UIImageimageNamed:@"login_textfield_more_flip@2x.png"]];
    }
    
    //设置单元格宽度
    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath{
        return self.textField.frame.size.height*0.8;
    }
    
    //每个分区多少行
    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
        return self.tbArray.count;
     }
    
    
    //设置单元格
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        static NSString *cellDo=@"cellDo";
        UITableViewCell *cell=(UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellDo];
        if (!cell) {
            cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:cellDo];
        }
        [[cell textLabel] setText:[_tbArray objectAtIndex:indexPath.row]];
        cell.backgroundColor=[UIColor grayColor];
        return  cell;
    }
    @end

    使用UIPickerView在UITextField实现滚动选择

    //  PickerTestViewController.m文件

    //
    //  PickerTestViewController.m
    //  
    //
    //  Created by Vie on 15/10/12.
    //
    //
     
    
    #import "PickerTestViewController.h"
    @interface PickerTestViewController ()<UIPickerViewDelegate,UIPickerViewDataSource>
    @property(nonatomic,strong)UIPickerView *pickerView;
    @property(nonatomic,strong)UITextField *txField;
    @property(nonatomic,strong)NSMutableArray *yearArray,*monthArray,*dayArray;
    @end
    
    @implementation PickerTestViewController
    - (void)viewDidLoad {
        [super viewDidLoad];
        [self.view setBackgroundColor:[UIColor whiteColor]];
      
        self.yearArray=[[NSMutableArray alloc] initWithObjects:@"2013",@"2014",@"2015", nil];
    
        self.monthArray=[[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
    
        self.dayArray=[[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8", nil];
    
        self.pickerView=[[UIPickerView alloc] init];
        self.pickerView.dataSource=self;
        self.pickerView.delegate=self;
      
        self.txField=[[UITextField alloc] initWithFrame:CGRectMake(self.view.frame.size.width*0.1f, 100, self.view.frame.size.width*0.8f, 44)];
        self.txField.layer.borderWidth=1.0f;
        self.txField.layer.cornerRadius=5.0f;
        [self.view addSubview:self.txField];
        //设置输入框的弹出视图为UIPickerView
        self.txField.inputView=self.pickerView;
    }
    
    //用户选中某个row时,对应改变文本
    -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
        [self setTxFieldText];
    }
    
    //结束文本框触摸时隐藏UIPickerView
    -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
        if (![self.txField  isExclusiveTouch]) {
            [self.txField resignFirstResponder];
            [self setTxFieldText];
        }
    }
    
    //将文本框的内容设置为滚动表格选中值
    -(void)setTxFieldText{
        self.txField.text=[NSString stringWithFormat:@"%@-%@-%@",[self.yearArrayobjectAtIndex:[self.pickerView selectedRowInComponent:0]],[self.monthArrayobjectAtIndex:[self.pickerView selectedRowInComponent:1]],[self.dayArrayobjectAtIndex:[self.pickerView selectedRowInComponent:2]]];
    }
    
    //指定UIPickerView上的文本
    -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
        NSString *str;
        if (component==0) {
            str=[self.yearArray objectAtIndex:row];
        }else if (component==1){
            str=[self.monthArray objectAtIndex:row];
        }else{
            str=[self.dayArray objectAtIndex:row];
        }
        return str;
    }
    
    //返回每个轮最大的行数。
    -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
        if (component==0) {
            return self.yearArray.count;
        }else if (component==1){
            return self.monthArray.count;
        }else{
            return self.dayArray.count;
        }
    }
    
    //返回一个整数,表示列数
    -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
        return 3;
    }
    @end

     使用UIDatePicker在UITextField实现日期选择

    //DatePickerViewController.h文件

    //
    //  DatePickerViewController.h
    //  
    //
    //  Created by Vie on 15/10/12.
    //
    //
    
    #import <UIKit/UIKit.h>
    @interface DatePickerViewController : UIViewController
     
    @end

    //DatePickerViewController.m文件

    //
    //  DatePickerViewController.m
    //  
    //
    //  Created by Vie on 15/10/12.
    //
    //
    #import "DatePickerViewController.h"
    
    @interface DatePickerViewController ()
    @property(nonatomic,strong)UITextField *txField;
    @property(nonatomic,strong)UIDatePicker *datePicker;
    @end
     
    @implementation DatePickerViewController
    - (void)viewDidLoad {
        [super viewDidLoad];
        [self.view setBackgroundColor:[UIColor whiteColor]];   
     
        self.txField=[[UITextField alloc] initWithFrame:CGRectMake(self.view.frame.size.width*0.1f, 100, self.view.frame.size.width*0.8f, 44)];
        self.txField.layer.borderWidth=1.0f;
        self.txField.layer.cornerRadius=5.0f;
        self.txField.placeholder=@"选择日期";
        [self.view addSubview:self.txField];
    
        self.datePicker=[[UIDatePicker alloc] init];
        //设置日期选取器模式
        self.datePicker.datePickerMode=UIDatePickerModeDate;
        //默认根据手机本地设置来显示为中文还是其他语言
        NSLocale *locale=[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];//设置为中文显示
        self.datePicker.locale=locale;
        //设置日期范围
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat: @"yyyy-MM-dd"];
        NSDate *minDate= [dateFormatter dateFromString:@"1970-01-01"];
        NSDate *maxDate=[dateFormatter dateFromString:@"2030-12-31"];
        self.datePicker.minimumDate=minDate;
        self.datePicker.maximumDate=maxDate;
        //设置响应事件
        [self.datePicker addTarget:self action:@selector(pickerValueChanged) forControlEvents:UIControlEventValueChanged];
        
        [self.txField setInputView:self.datePicker];
    }
    
    //结束文本框触摸时隐藏UIPickerView
    -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
        if (![self.txField  isExclusiveTouch]) {
            [self.txField resignFirstResponder];
            [self setTxFieldText];
        }
    }
     
    //选择器改变时,对应改变文本框内容
    -(void)pickerValueChanged{
        [self setTxFieldText];
    }
    
    //设置文本框内容
    -(void)setTxFieldText{
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat: @"yyyy-MM-dd"];
        NSString *dateString=[dateFormatter stringFromDate:self.datePicker.date];
        self.txField.text=dateString;
    }
    @end

    设置文本输入框样式

        //图片验证码输入
        self.imgLable=[[UILabel alloc] initWithFrame:CGRectMake(0, 0, telLableWidth, telLableHeight)];
        self.imgLable.text=@"验证码";
        self.imgLable.textColor=[UIColor blackColor];
        self.imgLable.numberOfLines=0;
        self.imgLable.textAlignment=NSTextAlignmentCenter;
        self.imgLable.font=[UIFont fontWithName:@"Arial" size:18.0f];
    UIView *imgBgView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 95, 40)];
        self.codeImgView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 80, 38)];
        self.codeImgView.center=imgBgView.center;
        self.codeImgView.backgroundColor=[UIColor grayColor];
        [imgBgView addSubview:self.codeImgView];
     
        float imgCodeFielY=statusHeight+navHeight+30+self.telLable.frame.size.height;
        self.imgCodeField=[[UITextField alloc] initWithFrame:CGRectMake(0, imgCodeFielY, telFieldWidth, telLableHeight)];
        self.imgCodeField.placeholder=@"输入图片验证码";
        [self.imgCodeField setBorderStyle:UITextBorderStyleRoundedRect];
        //设置输入框左边视图
        self.imgCodeField.leftView=self.imgLable;
        self.imgCodeField.leftViewMode=UITextFieldViewModeAlways;
    
        //设置输入框右边视图
        self.imgCodeField.rightView=imgBgView;
        self.imgCodeField.rightViewMode=UITextFieldViewModeAlways;
        self.imgCodeField.tag=102;
        self.imgCodeField.delegate=self;
        self.imgCodeField.keyboardType=UIKeyboardTypeEmailAddress;
        [self.view addSubview:self.imgCodeField];

     

    实现带文本输入的UIAlertView弹窗

       UIAlertView *alerView=[[UIAlertView alloc] initWithTitle:@"请输入账户密码" message:nil delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];
        [alerView setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
    
        UITextField *accountField=[alerView textFieldAtIndex:0];
        accountField.placeholder=@"请输入账户";
    
        UITextField *pwdField=[alerView textFieldAtIndex:1];
        pwdField.placeholder=@"请输入密码";
        [alerView show];
    
       
    
    -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
        NSLog(@"账号:%@;密码:%@",[alertView textFieldAtIndex:0].text,[alertView textFieldAtIndex:1].text);
    }
  • 相关阅读:
    [hdu-2048] 神、上帝以及老天爷
    or1200中IMMU分析(续)
    Java Applet读写client串口——终极篇
    树莓派_Linux串口编程_实现自发自收
    2014百度实习生面试题(部分)具体解释
    Leetcode
    eclipse+webservice开发实例
    现有一些开源ESB总线的比較
    《HTML5 从入门到精通--7.6.3 单元格垂直跨度——rowspan》
    百度究竟是哪国的公司
  • 原文地址:https://www.cnblogs.com/douniwanxia/p/5893284.html
Copyright © 2020-2023  润新知