2015-11-04 09:22:03 heikefangxian23 阅读数 4094

1.   遇到键盘遮挡怎么办?

      回答:给textview找到delegate,并让delegate实现方法

- (void)textViewDidEndEditing:(UITextView *)textView

{

    [textView resignFirstResponder];

    

    NSTimeInterval animationDuration = 0.30f;

    [UIViewbeginAnimations:@"ResizeForKeyboard"context:nil];

    [UIView setAnimationDuration:animationDuration];

    

    self.scrollview.frame =CGRectMake(self.scrollview.frame.origin.x,

                                      self.scrollview.frame.origin.y,

                                      self.scrollview.frame.size.width,

                                      self.scrollview.frame.size.height);

    [UIViewcommitAnimations];

    return;

}

    这样可以让textview所在的view或者scrollview上移,以避开键盘。

    

2.  使用完键盘后,怎么让键盘自己关闭?

     除了设置 self._textView.delegate=self;

       还要设置self._textView.returnKeyType=UIReturnKeyDone;


- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range

 replacementText:(NSString *)text {

    if ([text isEqualToString:@"\n"]) {

        [textView resignFirstResponder];

        return NO;

    }

    return YES;

}



2014-09-18 18:15:06 BianHuanShiZhe 阅读数 2515

- (void)textViewDidChange:(UITextView *)textView

{

    [textView flashScrollIndicators];   // 闪动滚动条

    

    static CGFloat maxHeight = 130.0f;

    CGRect frame = textView.frame;

    CGSize constraintSize = CGSizeMake(frame.size.width, MAXFLOAT);

    CGSize size = [textView sizeThatFits:constraintSize];

    if (size.height >= maxHeight)

    {

        size.height = maxHeight;

        textView.scrollEnabled = YES;   // 允许滚动

    }

    else

    {

        textView.scrollEnabled = NO;    // 不允许滚动,当textview的大小足以容纳它的text的时候,需要设置scrollEnabedNO,否则会出现光标乱滚动的情况

    }

    textView.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, size.height);

}


2017-02-17 19:45:41 J_Kang 阅读数 1147
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        if (text=="\n") {
            textView.resignFirstResponder()
            return false
        }
        return true
    }

2015-03-24 14:39:38 u011123724 阅读数 348

在我们使用textView进行编程时,经常会遇到输入时文字会自动置底,但是有时候中文输入时,会隐藏一行的情况。


这是因为这个参数:


   textView.layoutManager.allowsNonContiguousLayout = NO;


   这行代码是设置了UITextView中的 layoutManager(NSLayoutManager) 的是否为连续布局属性,默认是YES,设置为NO后,UITextView就不会在自己重置滑动了。

2018-01-17 17:32:21 ljc_563812704 阅读数 407

一、实现的逻辑很简单且代码量不多,直接贴出源码供方便快速使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@property (nonatomic, strong) UITextView *textView;
@property (nonatomic, strong) UILabel *limitLabel;
    _textView = [[UITextView alloc] initWithFrame:CGRectMake(55, MAIN_WIDTH-10130.3)];
    _textView.placeHolder = @"请描述您的问题...";
    _textView.returnKeyType = UIReturnKeyDone;
    _textView.delegate = self;
    _textView.textColor = UIColorFromRGB(0xBEBDBD);
    _textView.font = [UIFont systemFontOfSize:15];
    [self addSubview:_textView];
     
    _limitLabel = [[UILabel alloc] initWithFrame:CGRectMake(MAIN_WIDTH/4*3130.3, MAIN_WIDTH/4-1020)];
    _limitLabel.text = @"0/500";
    _limitLabel.font = [UIFont systemFontOfSize:12];
    _limitLabel.textAlignment = NSTextAlignmentRight;
    _limitLabel.textColor = UIColorFromRGB(0x999999);
    _limitLabel.backgroundColor = [UIColor clearColor];

二、实现TextView代理方法

实时监听TextView输入框的return键,当点击return键时结束编辑的实现思路:判断输入的字是否为\n回车,即按下return键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- (void)textViewDidChange:(UITextView *)textView {
    _limitLabel.text = [NSString stringWithFormat:@"%ld/500",textView.text.length ];
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
    NSLog(@"textLength == %ld",textView.text.length);
    if ([text isEqualToString:@"\n"]){ //判断输入的字是否是回车,即按下return
        [self.textView resignFirstResponder];
        return NO;
    }
    if ([self stringContainsEmoji:text] == YES) {
        [PubllicMaskViewHelper showTipViewWith:@"不支持输入Emoji表情符号" inSuperView:self withDuration:1];
        return NO;
    }
    if (textView.text.length + text.length > 500) {
        NSString *allText = [NSString stringWithFormat:@"%@%@",textView.text,text];
        textView.text = [allText substringToIndex:500];
        [PubllicMaskViewHelper showTipViewWith:@"输入不能超过500个字" inSuperView:self withDuration:1];
        return NO;
    }
    return YES;
}

三、过滤所有Emoji表情符号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// 过滤所有表情
- (BOOL)stringContainsEmoji:(NSString *)string {
    __block BOOL returnValue = NO;
    [string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:
     ^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
          
         const unichar hs = [substring characterAtIndex:0];
         // surrogate pair
         if (0xd800 <= hs && hs  1) {
                 const unichar ls = [substring characterAtIndex:1];
                 const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
                 if (0x1d000 <= uc && uc  1) {
             const unichar ls = [substring characterAtIndex:1];
             if (ls == 0x20e3) {
                 returnValue = YES;
             }
              
         else {
             // non surrogate
             if (0x2100 <= hs && hs <= 0x27ff) {
                 returnValue = YES;
             else if (0x2B05 <= hs && hs <= 0x2b07) {
                 returnValue = YES;
             else if (0x2934 <= hs && hs <= 0x2935) {
                 returnValue = YES;
             else if (0x3297 <= hs && hs <= 0x3299) {
                 returnValue = YES;
             else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) {
                 returnValue = YES;
             }
         }
     }];
     
    return returnValue;
}

iOS textView

阅读数 125

没有更多推荐了,返回首页