iOS-鍵盤常見處理,自定義鍵盤上的工具條、定義鍵自盤方法等


場景一說明

在iOS開發中,我們經常處理這樣的情況:

當鍵盤出現或者消失的時候,我們需要做一些相應的操作。比如鍵盤上面的工具條的位置變化等。

這里我們就假設有一個工具條在鍵盤的上面,我們要求當鍵盤出現的時候,工具條的位置向上移動始終在鍵盤的上面,當鍵盤消失的時候,工具條向下移動到屏幕的下面。

這時候,我們應該怎么處理呢?

思路

  • 為了讓工具條上下移動,我們就要求出鍵盤上下移動的高度值,從而知道工具條該上下移動的高度值
  • 想獲取鍵盤的移動值,就要對鍵盤的顯示和隱藏進行監聽,我們這里可以使用通知

是不是覺得思路很清晰了,那么開始吧。

處理步驟

  • 1、給鍵盤設一個通知
/**
     *  給鍵盤的frame改變添加監聽
     *  @param keyBoardWillChangeFrame: 監聽方法
     */
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyBoardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
  • 2、在鍵盤的通知監聽方法里面做需要的操作

  - (void)keyboardWillChangeFrame:(NSNotification *)notification
{
    // 鍵盤顯示\隱藏完畢的frame
    CGRect frame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
    // 修改底部約束
    self.bottomSapce.constant = XMGScreenH - frame.origin.y;
    // 動畫時間
    CGFloat duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    // 動畫
    [UIView animateWithDuration:duration animations:^{
        [self.view layoutIfNeeded];
    }];
}

上一段代碼解釋:

notification.userInfo:

  • notification是指傳遞過來的通知
  • userInfo是一個字典,存儲任何和通知相關聯的可能用到的信息。當一個通知的值發生改變的時候,就會將值存儲到userInfo的字典中。例如這里的userInfo包含通知執行的時間,和通知結束時候鍵盤的frame等信息。
  • 也可以改變工具條的transform實現:
    self.toolbar.transform = CGAffineTransformMakeTranslation(0, -keyboardF.size.height);

自定義鍵盤,只需要設置下面的屬性即可

@property (readwrite, retain) UIView *inputView;

最后,一定要記得在dealoc方法里釋放監聽

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

場景二說明

有時候在同一個界面里面,可能有多個TextField輸入框,而點擊不同額輸入框,我們可能希望彈出的鍵盤擁有不同的工具條,這時候我們怎么辦呢?

思路

  • 首先我們要有那么幾種工具條,可以使用xib方式(簡單,不講解了了,不知道可以發郵件給我)
  • 然后設置不同輸入框的配件視圖(textField.inputAccessoryView = xxxTool)
  • 設置輸入框成為第一響應者,這樣彈出的時候就能有不同的toolBar了。

代碼實現

//這里不貼圖了,比較簡單
UIView *tool1 = [[[NSBundle mainBundle] loadNibNamed:@"ToolBar1" owner:nil options:nil] lastObject];
UIView *tool2 = [[[NSBundle mainBundle] loadNibNamed:@"ToolBar2" owner:nil options:nil] lastObject];
self.textField1.inputAccessoryView = tool1;
self.textField2.inputAccessoryView = tool2;

常用知識點:

成為第一響應者(可以調出鍵盤)

- (BOOL)becomeFirstResponder;

取消第一響應者

- (BOOL)resignFirstResponder;

全部取消第一響應者

- (BOOL)endEditing:(BOOL)force;    //使用這個使得view或者其所有的子視圖都取消第一響應者 (optionally force)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM