美文网首页UI
UITextView基本使用

UITextView基本使用

作者: 晓飞90 | 来源:发表于2018-03-20 19:02 被阅读25次

    UITextView的基本用法

    参考:http://blog.sina.com.cn/s/blog_9693f61a0101aode.html
    https://www.jianshu.com/p/dffa59bc490b

    1. TextView简单属性

    继承于UIScrollView,所以它具有UIScrollView的属性和方法。

    //初始化UITextView
    UITextView *textview =  [[UITextView alloc]initWithFrame:CGRectMake(100, 100, 300, 44)];
    
    textview.backgroundColor = [UIColor blueColor]; //设置背景色
    
    //设置当文字超过视图的边框时是否允许滑动,默认为“YES”
    textview.scrollEnabled = NO;
    
    //设置是否允许编辑内容,默认为“YES”
    textview.editable = YES;
    
    //设置代理方法的实现类
    textview.delegate = self;
    
    //设置显示文字颜色,设置字体名字和字体大小
    textview.textColor = [UIColor blackColor];
    textview.font = [UIFont fontWithName:@"Arial" size:18.0];
    
    //设置return键的类型
    textview.returnKeyType = UIReturnKeyDefault;
    //设置键盘类型一般为默认
    textview.keyboardType = UIKeyboardTypeDefault;
    //文本显示的位置默认为居左
    textview.textAlignment = NSTextAlignmentLeft;
    
    //显示数据类型的连接模式(如电话号码、网址、地址等)
    textview.dataDetectorTypes = UIDataDetectorTypeAll;
    //自适应高度
    self.textView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    //设置显示的文本内容
    
    //
    选中范围
    textView.selectedRange = NSMakeRange(8, 6);
    
    textview.text = @"UITextView详解";
    [self.view addSubview:textview];
    

    2.TextView的代理方法

    #pragma mark - UITextViewDelegate协议中的方法
    
    //将要进入编辑模式[开始编辑]
    - (BOOL)textViewShouldBeginEditing:(UITextView *)textView
    {return YES;}
    
    //已经进入编辑模式
    - (void)textViewDidBeginEditing:(UITextView *)textView {}
    //将要结束/退出编辑模式
    - (BOOL)textViewShouldEndEditing:(UITextView *)textView {return YES;}
    //已经结束/退出编辑模式
    - (void)textViewDidEndEditing:(UITextView *)textView {}
    
    //当textView的内容发生改变的时候调用
    - (void)textViewDidChange:(UITextView *)textView {}
    //选中textView 或者输入内容的时候调用[焦点发生改变]
    - (void)textViewDidChangeSelection:(UITextView *)textView {}
    
    //从键盘上将要输入到textView 的时候调用 [内容将要发生改变编辑]
    //rangge  光标的位置
    //text  将要输入的内容
    //返回YES 可以输入到textView中  NO不能
    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {return YES;}
    
    

    3. 代理方法解决相关问题

    //控件自适应输入的文本的内容的高度,只要在textViewDidChange的代理方法中加入调整控件大小的代理即可
    - (void)textViewDidChange:(UITextView *)textView{
        //计算文本的高度
        CGSize constraintSize;
        constraintSize.width = textView.frame.size.width-16;
        constraintSize.height = MAXFLOAT;
        CGSize sizeFrame =[textView.text sizeWithFont:textView.font
                                    constrainedToSize:constraintSize
                                        lineBreakMode:UILineBreakModeWordWrap];
    
        //重新调整textView的高度
        textView.frame = CGRectMake(textView.frame.origin.x,textView.frame.origin.y,textView.frame.size.width,sizeFrame.height+5);
    }
    
    
    // 控制输入文字的长度和内容,可调用一下方法
    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
    {
        if (range.location>=32)
        {
            //控制输入文本的长度
            return  NO;
        }
        if ([text isEqualToString:@"\n"]) {
            //禁止输入换行
            return NO;
        }
        else
        {
            return YES;
        }
    }
    
    UITextVIew的限制数字的Demo->输入金额Demo
    
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
        //string就是此时输入的那个字符 textField就是此时正在输入的那个输入框 返回YES就是可以改变输入框的值 NO相反
        if ([string isEqualToString:@"\n"])  //按会车可以改变
        {
            return YES;
        }
        //得到输入框的内容
        NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];
        if (self.tf_signsum == textField)  //判断是否是我们想要限定的那个输入框
        {
            // 判断首位不能为零
            if (toBeString.length > 0) {
                if ([toBeString doubleValue] == 0) {
                    //判断首位不能为零
                    return NO;
                }
            }
            if (![self validateNumber:toBeString]) {
                //提示请输入数字
                return NO;
            }
            if ([toBeString length] > 12) { //如果输入框内容大于12则弹出警告
    
                textField.text = [toBeString substringToIndex:12];
                //最多输入12位
                return NO;
            }
            self.lb_AmountInwords.text = [XHTConversionStringTools stringWithAmountInwords:toBeString];
        }
        if (self.tf_remark == textField)  //判断是否时我们想要限定的那个输入框
        {
            if ([toBeString length] > 30) { //如果输入框内容大于20则弹出警告
    
                textField.text = [toBeString substringToIndex:30];
                [UIToastView showToastViewWithContent:@"最多只能输入30个文字" andRect:KTOASTRECT andTime:1 andObject:self];
                return NO;
            }
        }
        return YES;
    }
    

    之前看到很多好朋友问到UITextView限制字数,或者限制成只输入数字等,接下来见到了解下UITextView。

    - (BOOL)validateNumber:(NSString*)number {
        BOOL res = YES;
        NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
        int i = 0;
        while (i < number.length) {
            NSString * string = [number substringWithRange:NSMakeRange(i, 1)];
            NSRange range = [string rangeOfCharacterFromSet:tmpSet];
            if (range.length == 0) {
                res = NO;
                break;
            }
            i++;
        }
        return res;
    }
    
    //UITextView退出键盘的方法
    //如果你程序是有导航条的,可以在导航条上面加多一个Done的按钮,用通知来退出键盘,
    //略。如果textview里不用回车键,可以把回车键当做退出键盘的响应键。
    UITextView: 响应键盘的 return 事件
    
    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
        if ([text isEqualToString:@"\n"]){ //判断输入的字是否是回车,即按下return
            //在这里做你响应return键的代码
            [textView resignFirstResponder];
            return NO; //这里返回NO,就代表return键值失效,即页面上按下return,不会出现换行,如果为yes,则输入页面会换行
        }
        return YES;
    }
    
    iOS开发中利用runtime设置UITextView的默认文字
    
    _textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 50, [UIScreen mainScreen].bounds.size.width, 200)];
    
    //之前的做法
    UILabel *placeholderLabel = [[UILabel alloc] init];
    placeholderLabel.text = @"这是默认文字。。。";
    placeholderLabel.font = [UIFont systemFontOfSize:15.f];
    placeholderLabel.textColor = [UIColor whiteColor];
    placeholderLabel.numberOfLines = 0;
    [placeholderLabel sizeToFit];
    [_textView addSubview:placeholderLabel];
    //runtime的做法
    [_textView setValue:placeholderLabel forKey:@"_placeholderLabel"];
    

    设置UITextView圆角问题

    做法是在 #import QuartzCore/QuartzCore.h 后,便能調用[textView.layer setCornerRadius:10]; 來把 UITextView 设定圓角
    

    3. 扩展

    //富文本
    NSMutableAttributedString * attrStr = [[NSMutableAttributedString alloc] initWithString:@"这是一个富文本"];
    [attrStr addAttribute:NSFontAttributeName
                        value:[UIFont systemFontOfSize:30.0f]
                        range:NSMakeRange(4, 3)];
    textView.attributedText = attrStr;
    
    //是否允许改变文本属性字典
    textView.allowsEditingTextAttributes = NO;
    NSMutableDictionary * attributesDic = [textView.typingAttributes mutableCopy];
    [attributesDic setObject:[UIColor redColor] forKey:NSForegroundColorAttributeName];
    
    // 重新设置 接下来改变的文字 的属性字典
    textView.typingAttributes = attributesDic;
    /*一般在一些代理函数中使用,比如当编辑状态的变化*/
    
    //输入视图
    // 试着改变view的frame,发现只有height值会对视图有影响,只会改变附加视图的高度
    UIView * view = [[UIView alloc] initWithFrame:CGRectMake(100, 50, 100, 100)];
    view.backgroundColor = [UIColor redColor];
    // 不弹出键盘,弹出添加的这个视图,一般用作像银行app的自定义键盘
    textView.inputView = view;
    
    输入键盘附加视图
    UIView * view = [[UIView alloc] initWithFrame:CGRectMake(100, 50, 100, 50)];
    view.backgroundColor = [UIColor redColor];
    // 在键盘上附加一个视图,一般用于添加一个收回键盘的按钮
    textView.inputAccessoryView = view;
    
    //获得焦点后选中现有文本,输入内容时清除当前选中文本
    textView.clearsOnInsertion = YES; // 默认为NO
    //文本内容与边界的间距
    textView.textContainerInset = UIEdgeInsetsMake(20, 20, 20, 20);
    
    // 在程序中添加以下通知就可以获得相应的状态事件
    // 开始编辑的通知
    UIKIT_EXTERN NSString * const UITextViewTextDidBeginEditingNotification;
    // 文本发生变化的通知
    UIKIT_EXTERN NSString * const UITextViewTextDidChangeNotification;
    // 编辑结束的通知
    UIKIT_EXTERN NSString * const UITextViewTextDidEndEditingNotification;
    

    相关文章

      网友评论

        本文标题:UITextView基本使用

        本文链接:https://www.haomeiwen.com/subject/xrlbqftx.html