inputAccessoryView : 系統自帶的鍵盤上面的工具條視圖(並無什麼卵用)git
因爲系統自帶的工具條隨着鍵盤的隱藏也一塊兒隱藏了,而如今不少應用的需求的是鍵盤隱藏工具條停留在最底部,因此咱們須要自定義工具條(或者說輸入框吧),具體效果如圖所示:github
Demo示例工具
這種方式須要在storyboard或xib中找到輸入框和父控件(控制器)的約束,代碼中的self.bottomConstraint
就是該約束,咱們經過監聽鍵盤的彈出和收回來更改約束的值,再加點動畫效果,就是這麼簡單學習
- (void)viewDidLoad { [super viewDidLoad]; // 監聽鍵盤改變 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil]; } // 移除監聽 - (void)dealloc{ [[NSNotificationCenter defaultCenter] removeObserver:self]; } // 監聽鍵盤的frame即將改變的時候調用 - (void)keyboardWillChange:(NSNotification *)note{ // 得到鍵盤的frame CGRect frame = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; // 修改底部約束 self.bottomConstraint.constant = self.view.frame.size.height - frame.origin.y; // 執行動畫 CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue]; [UIView animateWithDuration:duration animations:^{ // 若是有須要,從新排版 [self.view layoutIfNeeded]; }]; }
此方式大部分代碼和上面是同樣的,只不過此次咱們不是修改constant了,而是經過transform方式修改輸入框 鍵盤隱藏 和 鍵盤顯示 時 二者y 的 差值(必定要斷好句)動畫
/** * 設置輸入框 */ - (void)setUpToolbar{ BSPostWordToolbar *toolbar = [BSPostWordToolbar viewFromXib]; toolbar.width = self.view.width; toolbar.y = BSScreenH - toolbar.height; // 添加通知監聽鍵盤的彈出與隱藏 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil]; [self.view addSubview:toolbar]; self.toolbar = toolbar; } - (void)dealloc{ [[NSNotificationCenter defaultCenter] removeObserver:self]; } - (void)keyboardWillChangeFrame:(NSNotification *)notification{ // 拿到鍵盤彈出時間 double duration = [notification.userInfo[ UIKeyboardAnimationDurationUserInfoKey ] doubleValue]; // 計算transform CGFloat keyboardY = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].origin.y; CGFloat ty = keyboardY - BSScreenH; /** * 像這種移動後又回到原始位置的建議使用transform,由於transform能夠直接清零回到原來的位置 */ [UIView animateWithDuration:duration animations:^{ self.toolbar.transform = CGAffineTransformMakeTranslation(0, ty); }]; }
更多關於iOS學習開發的文章請登錄個人我的博客www.zhunjiee.com,歡迎前來參觀學習spa