美文网首页
iOS知识整理:使用UITextView可能在项目中遇到的问题

iOS知识整理:使用UITextView可能在项目中遇到的问题

作者: 大布溜 | 来源:发表于2017-12-06 17:10 被阅读306次

    1.为UITextView添加placeholder

    一般在UITextField里面经常会用到placeholder属性,而UITextView的placeholder属性却是私有的,无法直接调用,怎么办呢,当然是强大的kvc咯

    -(void)setPlaceHolderByKVCWithString:(NSString *)placeholder forTextView:(UITextView *)textView
    {
        // _placeholderLabel
        UILabel *placeHolderLabel = [[UILabel alloc] init];
        placeHolderLabel.text = placeholder;
        placeHolderLabel.numberOfLines = 0;
        placeHolderLabel.textColor = [UIColor lightGrayColor];
        [placeHolderLabel sizeToFit];
        [textView addSubview:placeHolderLabel];
        
        // same font
        textView.font = [UIFont systemFontOfSize:18.f];
        placeHolderLabel.font = [UIFont systemFontOfSize:18.f];
        
        [textView setValue:placeHolderLabel forKey:@"_placeholderLabel"];
    }
    

    ⚠️注意:textview和placeholderLabel的字体要保持一致,否则会出现,为输入之前holder向上偏移的现象。

    2.监听textview的文本改变

    🚩。通过消息机制来监听文本变化。uitextview内部应该是已经写好了post部分的位置,我们需要加上add方法,当文本改变时,获得消息调用方法。

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(textViewDidChangeText:) 
                                                 name:UITextViewTextDidChangeNotification 
                                                object:_textview];
    

    👀:这里object终于不是nil了。监听指定实际例原来是这么用的呀,厉害厉害。

    - (void)textViewDidChangeText:(NSNotification *)notification
    {
        UITextView *textView = (UITextView *)notification.object;
        NSString *toBeString = textView.text;
    }
    

    3.限制输入字数的方法,支持中文和英文

        /**
         *  最大输入长度,中英文字符都按一个字符计算
         */;
        static int kMaxLength = 38;
    
        UITextView *textView = (UITextView *)notification.object;
        NSString *toBeString = textView.text;
    
        // 获取键盘输入模式
        NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage];
        // 中文输入的时候,可能有markedText(高亮选择的文字),需要判断这种状态
        // zh-Hans表示简体中文输入, 包括简体拼音,健体五笔,简体手写
        if ([lang isEqualToString:@"zh-Hans"]) {
            UITextRange *selectedRange = [textView markedTextRange];
            //获取高亮选择部分
            UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
            // 没有高亮选择的字,表明输入结束,则对已输入的文字进行字数统计和限制
            if (!position) {
                if (toBeString.length > kMaxLength) {
                    // 截取子串
                    textView.text = [toBeString substringToIndex:kMaxLength];
                }
            } else { // 有高亮选择的字符串,则暂不对文字进行统计和限制
                NSLog(@"11111111111111========      %@",position);
            }
        } else {
            // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
            if (toBeString.length > kMaxLength) {
                // 截取子串
                textView.text = [toBeString substringToIndex:kMaxLength];
            }
        }
    

    相关文章

      网友评论

          本文标题:iOS知识整理:使用UITextView可能在项目中遇到的问题

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