(自用)鍵盤遮擋輸入框問(wèn)題

看了其他人的博客,根據(jù)需求寫(xiě)的:

要實(shí)現(xiàn)的效果就是,如果鍵盤遮住的輸入框,那么要把view上移,所以需要拿到當(dāng)前輸入框的位置,控制器實(shí)現(xiàn)UITextFiled的代理,有一個(gè)代理方法

//開(kāi)始編輯
- (void)textFieldDidBeginEditing:(UITextField*)textField
{
    self.tempTextField = textField;
}

當(dāng)點(diǎn)擊輸入框的時(shí)候,拿到這個(gè)輸入框,變成全局變量,在通知的觸發(fā)事件里面,進(jìn)行比較,如果遮住了,就需要view上移一段距離(根據(jù)需求調(diào)節(jié)),當(dāng)鍵盤需要消失的時(shí)候,還需要把view整體降下來(lái)

1.首先注冊(cè)兩個(gè)通知,監(jiān)聽(tīng)鍵盤出現(xiàn)和消失

//注冊(cè)通知
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

2.接著實(shí)現(xiàn)通知觸發(fā)事件

  • 我在這里還定義了一個(gè)view的偏移量offsetY,方便鍵盤回收的時(shí)候,調(diào)節(jié)view的frame.
  • 有一個(gè)問(wèn)題就是如果輸入完之后,鍵盤沒(méi)回收,又點(diǎn)擊了另外一個(gè)輸入框,會(huì)出現(xiàn)問(wèn)題,所以我需要做一個(gè)判斷,上一個(gè)鍵盤到底有沒(méi)有回收,如果沒(méi)有,我會(huì)先回收鍵盤,然后根據(jù)第二個(gè)鍵盤調(diào)節(jié)view
#pragma mark--通知事件
- (void)keyboardWillShow:(NSNotification*)noti
{
    //根據(jù)當(dāng)前輸入框調(diào)整view
    CGFloat textFieldY = kScreenHigh - self.tempTextField.frame.origin.y;
    CGFloat textFieldHeight = self.tempTextField.frame.size.height;
    
    NSDictionary* info = [noti userInfo];
    CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
    //鍵盤高度
    CGFloat keyboardHeight = keyboardSize.height;
//    NSLog(@"輸入框高度%f鍵盤高度%f",textFieldY - textFieldHeight,keyboardHeight);
    //在第二個(gè)鍵盤出來(lái)前,判斷上個(gè)鍵盤的偏移量 ,退回去
    if (self.offsetY > 0) {
        [UIView animateWithDuration:0.5f delay:0.f usingSpringWithDamping:10.f initialSpringVelocity:1.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
            CGRect oldframe = self.view.frame;
            oldframe.origin.y += self.offsetY;
            self.view.frame = oldframe;
        } completion:nil];
        self.offsetY = 0;
    }
    //判斷鍵盤是否擋住輸入框
    if (keyboardHeight >= textFieldY) {
        // NSLog(@"輸入框高度%f鍵盤高度%f",textFieldY - textFieldHeight,keyboardHeight);
        //偏移量 保存下來(lái)
        self.offsetY = keyboardHeight - textFieldY + textFieldHeight;
        [UIView animateWithDuration:0.5f delay:0.f usingSpringWithDamping:10.f initialSpringVelocity:1.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
            CGRect oldframe = self.view.frame;
            oldframe.origin.y -= self.offsetY;
            self.view.frame = oldframe;
        } completion:nil];
    }else{
        self.offsetY = 0;
    }
    
}
  • 還有鍵盤消失的
- (void)keyboardWillHide:(NSNotification*)noti
{
    [UIView animateWithDuration:0.5f delay:0.f usingSpringWithDamping:10.f initialSpringVelocity:1.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
        CGRect oldframe = self.view.frame;
        oldframe.origin.y += self.offsetY;
        self.view.frame = oldframe;
    } completion:nil];
    self.offsetY = 0;

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,262評(píng)論 4 61
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,021評(píng)論 25 709
  • 我有暴食癥,5年。從90斤長(zhǎng)到了120斤,18歲到23歲。以前不會(huì)想到在生命中最美好的5年中減肥竟然成了醒不來(lái)的...
    夕羽Lin閱讀 3,899評(píng)論 4 16
  • 此篇文章以三節(jié)課的分析為例,鏈接文章結(jié)構(gòu)如下:簡(jiǎn)述“借勢(shì)”好處——引入最近的“勢(shì)”和借勢(shì)方——把“借勢(shì)方”分為3類...
    紫澈閱讀 713評(píng)論 0 0
  • 作業(yè):記錄一段真實(shí)生活中人物的語(yǔ)言或者是兩三個(gè)人物的對(duì)話。建議大家先錄音,然后逐字打出來(lái)。 菲是我的好朋友,無(wú)話不...
    電電貓閱讀 317評(píng)論 2 1

友情鏈接更多精彩內(nèi)容