UITextField控件在登錄注冊這類填表的頁面中常常用到,這里討論采用的幾個體驗點
鍵盤的收起
scrollView滾動時收起鍵盤
非textField區域被點擊時收起鍵盤
第一個屬于滾動處理
_scrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;
第二個屬于點擊處理
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTableViewTapped)];
[_scrollView addGestureRecognizer:tapRecognizer];
- (void)onTableViewTapped
{
[_idCardNameField resignFirstResponder];
[_idCardNumberField resignFirstResponder];
[_mobilePhoneNumberField resignFirstResponder];
[_mobileVerifyCodeField resignFirstResponder];
}
鍵盤的Return鏈
#pragma mark - UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
if ([_idCardNameField isFirstResponder]) {
[_idCardNumberField becomeFirstResponder];
}
else if([_idCardNumberField isFirstResponder]) {
[_mobilePhoneNumberField becomeFirstResponder];
}
else if([_mobilePhoneNumberField isFirstResponder]) {
[_mobileVerifyCodeField becomeFirstResponder];
}
else if ([_mobileVerifyCodeField isFirstResponder]) {
[_mobileVerifyCodeField resignFirstResponder];
}
return YES;
}
鍵盤的定位
#pragma mark - Keyboard
- (void)keyboardDidShow:(NSNotification *)notification
{
NSDictionary* info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
CGFloat kbHeight = kbSize.height + 45;//懸浮bar的高度
UIEdgeInsets contentInsets = UIEdgeInsetsMake(_scrollView.contentInset.top, 0.0, kbHeight, 0.0);
_scrollView.contentInset = contentInsets;
_scrollView.scrollIndicatorInsets = contentInsets;
UITextField *firstResponderTextField = nil;
if ([_idCardNameField isFirstResponder]) {
firstResponderTextField = _idCardNameField;
}
else if ([_idCardNumberField isFirstResponder]) {
firstResponderTextField = _idCardNumberField;
}
else if ([_mobilePhoneNumberField isFirstResponder]) {
firstResponderTextField = _mobilePhoneNumberField;
}
else if ([_mobileVerifyCodeField isFirstResponder]) {
firstResponderTextField = _mobileVerifyCodeField;
}
if (firstResponderTextField) {
CGRect editItemRect = [_scrollView convertRect:firstResponderTextField.bounds fromView:firstResponderTextField];
if (!CGRectIsNull(editItemRect)) {
editItemRect.size.height += 40;
[_scrollView scrollRectToVisible:editItemRect animated:YES];
}
}
}
- (void)keyboardDidHide:(NSNotification*)notification
{
UIEdgeInsets contentInsets = UIEdgeInsetsMake(_scrollView.contentInset.top, 0, 0, 0);
_scrollView.contentInset = contentInsets;
_scrollView.scrollIndicatorInsets = contentInsets;
}