UI

UITextView基本使用

2018-03-20  本文已影响25人  晓飞90

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;
上一篇下一篇

猜你喜欢

热点阅读