因項目需求,一個頁面中有十幾個輸入框用于提交。每個cell樣式都一樣,直接一個cell就實現。
上方的輸入框點擊后鍵盤不會遮擋,下方的會遮擋,一開始也是像網上說得那樣,設置tableview的偏移,但輸入完后必須點擊完成或者別的地方收縮鍵盤,才可下次輸入,且tabelview不可滾動。
我先解決鍵盤不能滾動的問題,就不用tableview的偏移,直接縮小tableview的高度,讓tableview的高度變為原來的高度減去鍵盤的高度。這樣在鍵盤上方的tableview也能滑到底部且不會被鍵盤遮擋,這里用鍵盤出現消失的通知不再多說。
不可滾動解決了,開始解決偏移,又嘗試了獲取cell在tableview中的坐標位置,偏移到那一點,效果是實現了,但是不是在鍵盤正上方,效果不理想。
之后就把代碼刪了,只剩縮小tableview高度了,一運行,哎?被遮擋的textfield自動便宜到鍵盤之上了,檢查代碼,就只有兩點,一個是textfield 加了個事件,是開始編輯事件,在事件里將當前的textfield設為第一響應者,之后鍵盤彈出縮小tableview高度。
代碼
[textfield addTarget:self action:@selector(beginedit:) forControlEvents:UIControlEventEditingDidBegin];
-(void)beginedit:(UITextField*)textfield{
[textfield becomeFirstResponder];
}
-(void)keyBoardWasShowd:(NSNotification*)keyboardNotification{
NSDictionary*info=[keyboardNotification userInfo];
CGSize keyboardSize=[[info objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].size;
CGRect begin = [[[keyboardNotification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
CGRect end = [[[keyboardNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
//獲取不同的鍵盤高度,取最后顯示的鍵盤高度作為當前鍵盤
if(begin.size.height>0 && (begin.origin.y-end.origin.y>0)){
[UIView animateWithDuration:0.2 animations:^{
self.tableView.frame=CGRectMake(0,_tableView.frame.origin.y,Screen_Width,Screen_Height-64-keyboardSize.height);
}];
}