J'espère que vous avez déjà trouvé une solution en lisant tout cela. Mais j'ai trouvé ma solution comme suit. Je m'attends à ce que vous ayez déjà une cellule avec UITextField
. Ainsi, lors de la préparation, conservez simplement l'index de ligne dans la balise du champ de texte.
cell.textField.tag = IndexPath.row;
Créez une activeTextField
instance de UITextField
avec une portée globale comme ci-dessous:
@interface EditViewController (){
UITextField *activeTextField;
}
Donc, maintenant vous venez de copier coller mon code à la fin. Et n'oubliez pas d'ajouterUITextFieldDelegate
#pragma mark - TextField Delegation
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
activeTextField = textField;
return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField{
activeTextField = nil;
}
Enregistre le clavier notifications
#pragma mark - Keyboard Activity
- (void)registerForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
}
Poignées du clavier Notifications
:
Appelé lorsque le UIKeyboardDidShowNotification
est envoyé.
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
[self.tableView setContentInset:contentInsets];
[self.tableView setScrollIndicatorInsets:contentInsets];
NSIndexPath *currentRowIndex = [NSIndexPath indexPathForRow:activeTextField.tag inSection:0];
[self.tableView scrollToRowAtIndexPath:currentRowIndex atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
Appelé lorsque le UIKeyboardWillHideNotification
est envoyé
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
[self.tableView setContentInset:contentInsets];
[self.tableView setScrollIndicatorInsets:contentInsets];
}
Maintenant, une chose reste, appelez la registerForKeyboardNotifications
méthode dans la ViewDidLoad
méthode comme suit:
- (void)viewDidLoad {
[super viewDidLoad];
// Registering keyboard notification
[self registerForKeyboardNotifications];
// Your codes here...
}
Vous avez terminé, j'espère que votre textFields
volonté ne sera plus cachée par le clavier.