iOS 开发-UITextView(第二种输入框)的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 开发-UITextView(第二种输入框)的使用相关的知识,希望对你有一定的参考价值。

参考技术A     text    设置文本显示内容

     backgroundColor     设置背景色

     scrollEnabled     当文本内容超出视图边框时是否允许滑动, 默认为YES

     editable     设置是否允许编辑文本内容 默认为YES(可编辑)

     delegate     设置代理方法的实现类

     font     设置字体名字和大小

     returnKeyType     设置键盘上的return键的类型

     keyboardType     键盘类型

     textAlignment    文本内容居左还是居中还是居右

    dataDetectorTypes    显示数据类型的连接模式(如电话号码、网址、地址等)

     textColor    设置文本内容字体颜色

     autocapitalizationType    输入类型

     autocorrectionType    是否自动更正

     secureTextEntry     安全文本输入

     keyboardAppearance     键盘外观

     - (BOOL)textViewShouldBeginEditing:(UITextView*)textView;    将要开始编辑

     - (BOOL)textViewShouldEndEditing:(UITextView*)textView;     将要结束编辑

     - (void)textViewDidBeginEditing:(UITextView*)textView;     开始编辑

     - (void)textViewDidEndEditing:(UITextView*)textView;     结束编辑

     - (BOOL)textView:(UITextView*)textViewshouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text;     内容将要发生改变编辑

     - (void)textViewDidChange:(UITextView*)textView;     内容发生改变编辑

     - (void)textViewDidChangeSelection:(UITextView*)textView;     焦点发生改变

4. UITextView限制字数

iOS- UITextView与键盘回收与键盘遮挡输入框

一、UITextView

可以实现多行输入的文本框,基本属性与UITextField相似,可以输入多行,可以滚动。
UITextView还有个代理方式
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

可以控制输入文字的数量,较为常用

 #pragma mark UITextView的代理方法  

//是否可以开始编辑  
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView  
{  
    NSLog(@"%s",__func__);  
    return YES;  
}  

//是否可以结束编辑  
- (BOOL)textViewShouldEndEditing:(UITextView *)textView  
{  
    NSLog(@"%s",__func__);  
    return YES;  
}  

//已经开始编辑  
- (void)textViewDidBeginEditing:(UITextView *)textView  
{  
    NSLog(@"%s",__func__);  
}  
//已经结束编辑  
- (void)textViewDidEndEditing:(UITextView *)textView  
{  
    NSLog(@"%s",__func__);  
}  

//内容变化  
- (void)textViewDidChange:(UITextView *)textView  
{  
    NSLog(@"%s",__func__);  
}  
//光标变化  
- (void)textViewDidChangeSelection:(UITextView *)textView  
{  
    NSLog(@"%s",__func__);  
}  

//当前输入的位置,当前输入的文字,是否可以继续输入  
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text  
{  
    NSLog(@"length = %ld,location = %ld",range.length,range.location);  
    NSLog(@"text = %@",text);  
    return YES;  
}  
  //下面这俩不好理解,大概是验证url和文件名后缀的
//Asks the delegate if the specified text view should allow user interaction with the given URL in the given range of text.  
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange NS_AVAILABLE_IOS(7_0)  
{  
    NSLog(@"url= %@",URL.host);  
    NSLog(@"url touch");  
    return YES;        
}  
- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange NS_AVAILABLE_IOS(7_0)  
{  
    return YES;  
}

二、键盘回收与键盘遮挡输入框

使用输入文本框时,经常出现一个问题,弹出的键盘挡住了文本框,这时可以通过移动输入框的位置来避免这样的情况。
思路比较简单,注册通知来监听键盘的弹出和消失事件,再实现对应的方法,在键盘弹出或者消失的时候,改变原本视图的frame
使视图向上或者向下移动一个键盘的高度,键盘就不会遮挡住视图了

首先注册通知简体键盘弹出事件

//注册通知,监听键盘弹出事件  
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:)   
   name:UIKeyboardWillShowNotification object:nil];  

//注册通知,监听键盘消失事件  
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHidden)   
   name:UIKeyboardDidHideNotification object:nil];

键盘一旦弹出或者消失就触发方法对输入框进行移动

// 键盘弹出时调用方法  
-(void)keyboardDidShow:(NSNotification *)notification  

//键盘消失时调用  
-(void)keyboardDidHidden

再设置一个触摸事件,触摸空白处可以收回键盘

//点击屏幕空白处  
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  
{  
    //回收键盘,两者方式  
    //UITextView *textView = (UITextView*)[self.view viewWithTag:1001];  
    //[textView resignFirstResponder];  
    [self.view endEditing:YES];  
    NSLog(@"touch");  
}

完整代码:

#import "FirstViewController.h"  

@implementation FirstViewController  

-(void)viewDidLoad  
{  
    [super viewDidLoad];  

#pragma mark UITextView  

    //    UITextField:  
    //    继承UIControl,只能输入一行,不可以滚动,可以设置提醒文字。  
    //    有return代理方法和clearButtonMode  

    //    UITextView:  
    //    能输入多行,可以滚动,不可以设置提醒文字。  

    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 10, 280, 80)];//初始化  

    textView.backgroundColor=[UIColor colorWithRed:0.21 green:0.71 blue:0.51 alpha:0.5]; //背景色  

    textView.scrollEnabled = YES;    //当文字超过视图的边框时是否允许滑动,默认为“YES”  

    textView.editable = YES;        //是否允许编辑内容,默认为“YES”        

    textView.font=[UIFont fontWithName:@"Arial" size:18.0]; //设置字体名字和字体大小;  

    textView.returnKeyType = UIReturnKeyDefault;//return键的类型  

    textView.keyboardType = UIKeyboardTypeDefault;//键盘类型  

    textView.textAlignment = NSTextAlignmentLeft; //文本显示的位置默认为居左  

    textView.dataDetectorTypes = UIDataDetectorTypeAll; //显示数据类型的连接模式(如电话号码、网址、地址等)  

    textView.textColor = [UIColor blackColor];  

    textView.delegate = self;    //设置代理方法的实现类  

    textView.text = @"UITextView";//设置显示的文本内容  

    [textView.layer setCornerRadius:10]; //设置圆角  

    textView.tag = 1001; //设置tag值  

    //添加键盘的监听事件  

    //注册通知,监听键盘弹出事件  
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:)   
       name:UIKeyboardDidShowNotification object:nil];  

    //注册通知,监听键盘消失事件  
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHidden)   
       name:UIKeyboardDidHideNotification object:nil];  

    //在view中添加一个子view,设置此子view的tag值为1000,在此view上添加一个textView和一个发送按钮,  
    //如下图;我们要达到textView的键盘弹出时,整个View往上平移,键盘消失,view往下平移的效果,模拟发送短信的界面。  
    UIView *keyView = [[UIView alloc]initWithFrame:CGRectMake(0, 567, 375, 100)];  
    keyView.backgroundColor = [UIColor colorWithRed:0.2 green:0.3 blue:0.6 alpha:0.5];  
    keyView.tag = 1000;  

    [keyView addSubview:textView];  

    [self.view addSubview:keyView];  

}  

#pragma mark 实现监听到键盘变化时的触发的方法  

// 键盘弹出时  
-(void)keyboardDidShow:(NSNotification *)notification  
{  
    //获取键盘高度  
    NSValue *keyboardObject = [[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey];  

    NSLog(@"%@",keyboardObject);  

    CGRect keyboardRect;  

    [keyboardObject getValue:&keyboardRect];   

     //得到键盘的高度  
    //CGRect keyboardRect = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue];  

    // 取得键盘的动画时间,这样可以在视图上移的时候更连贯  
    double duration = [[notification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];  
    NSLog(@"%f",duration);  
    //调整放置有textView的view的位置  

    //设置动画  
    [UIView beginAnimations:nil context:nil];  

    //定义动画时间  
    [UIView setAnimationDuration:duration];  
    [UIView setAnimationDelay:0];  

    //设置view的frame,往上平移  
    [(UIView *)[self.view viewWithTag:1000] setFrame:CGRectMake(0, self.view.frame.size.height-keyboardRect.size.height-100, 375, 100)];  

    //提交动画  
    [UIView commitAnimations];  

}  

//键盘消失时  
-(void)keyboardDidHidden  
{  
    //定义动画  
    //[UIView beginAnimations:nil context:nil];  
   // [UIView setAnimationDuration:0.25];  

    //设置view的frame,往下平移  
    [(UIView *)[self.view viewWithTag:1000] setFrame:CGRectMake(0, 567, 375, 100)];  
   // [UIView commitAnimations];  
}  

//点击屏幕空白处  
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  
{  
    //回收键盘,两种方式  
    //UITextView *textView = (UITextView*)[self.view viewWithTag:1001];  
    //[textView resignFirstResponder];  
    [self.view endEditing:YES];  
    NSLog(@"touch");  
}  

@end

效果图

技术分享
技术分享

后面又一次要在tableView里面加textView,不好找的textView去resignKeyBoard,就使用一个可以得到的textView 去becomeFirst,然后再resignFirst

还有直接获得第一响应者的方法
UIWindow keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView 
firstResponder = [keyWindow performSelector:@selector(firstResponder)];
[firstResponder resignFirstResponder];

 

转载:http://www.jianshu.com/p/1bf3407b15f7








以上是关于iOS 开发-UITextView(第二种输入框)的使用的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发中如何在UITextView中添加默认文字

iOS UITextView自适应高度UITextContainerView抖动问题

iOS UITextView 高度随文字自己主动添加,并尾随键盘移动

ios 浅谈一下UITextFiled UITextView 在tableview的cell上边展示

ReactNative: 使用输入框TextInput组件

打造一个支持占位符的多行文本输入框