解決UITextField字數(shù)限制和鍵盤遮蓋問題

首先我們來說一說字數(shù)限制的問題
由于TextField的代理方法

  • (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; // return NO to not change text
    當輸入框內(nèi)容有變化時,其不能完全捕捉到變化,所以我們做字數(shù)限制時,最好不要用此方法。我們可以通過給textfield添加事件的方法來限制其字數(shù),
    [textfield addTarget:self action:@selector(textFieldValueChange:) forControlEvents:UIControlEventValueChanged];

其中textFieldValueChange是當textfield內(nèi)容有變化時就會調(diào)用,下面我們開始在此方法中限制字數(shù)

-(void) textFieldValueChange:(UITextField *) textfield
{
//因為輸入內(nèi)容可能是漢字,所以要在沒有高亮的時候,來獲取當前輸入框的內(nèi)容,再去限制字數(shù),否則會有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值變化,根據(jù)此y值來改變你需要改變的view

//解決鍵盤遮蓋問題
-(void)keyboardDidChangeFrame:(NSNotification *)noti
{
    NSDictionary *userInfo = noti.userInfo;
    
    // 動畫的持續(xù)時間
    double duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    
    // 鍵盤的frame
    CGRect keyboardF = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
    //鍵盤的Y值
    CGFloat keyboardY = keyboardF.origin.y;
    //根據(jù)鍵盤的Y值來改變你需要改變的View
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容