美文网首页
解决UITextField字数限制和键盘遮盖问题

解决UITextField字数限制和键盘遮盖问题

作者: 小__小 | 来源:发表于2016-09-27 15:58 被阅读0次

    首先我们来说一说字数限制的问题
    由于TextField的代理方法

    • (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; // return NO to not change text
      当输入框内容有变化时,其不能完全捕捉到变化,所以我们做字数限制时,最好不要用此方法。我们可以通过给textfield添加事件的方法来限制其字数,
        [textfield addTarget:self action:@selector(textFieldValueChange:) forControlEvents:UIControlEventValueChanged];
    

    其中textFieldValueChange是当textfield内容有变化时就会调用,下面我们开始在此方法中限制字数

    -(void) textFieldValueChange:(UITextField *) textfield
    {
    //因为输入内容可能是汉字,所以要在没有高亮的时候,来获取当前输入框的内容,再去限制字数,否则会有crash
        UITextRange *textRange = [textView markedTextRange];
        UITextPosition *position = [textView positionFromPosition:textRange.start offset:0];
        if (!position)
        {
            NSString *textStr = textView.text;
            if (textStr.length>500)
            {
                textfield.text = [textStr substringToIndex:500];
            }
        }
    }
    

    下面来讨论键盘遮盖问题
    这是我们常见到的状况,所以不做解释了,直接说解决方法。
    首先我们添加一个键盘的NSNotification

       [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardDidChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
    

    然后在接收通知的地方获取键盘的y值变化,根据此y值来改变你需要改变的view

    //解决键盘遮盖问题
    -(void)keyboardDidChangeFrame:(NSNotification *)noti
    {
        NSDictionary *userInfo = noti.userInfo;
        
        // 动画的持续时间
        double duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
        
        // 键盘的frame
        CGRect keyboardF = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
        //键盘的Y值
        CGFloat keyboardY = keyboardF.origin.y;
        //根据键盘的Y值来改变你需要改变的View
    }
    

    相关文章

      网友评论

          本文标题:解决UITextField字数限制和键盘遮盖问题

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