У меня есть UITableView
, и я вставил много ячеек. Каждая ячейка содержит UITextField
. Я хотел бы прокрутить автоматически до сфокусированного UITextField
. Но если я удаляю ячейку, UITableView
не может прокрутить до нужного UITextField
, клавиатура перекрывает сфокусированный UITextField
[super viewDidLoad];
// Do any additional setup after loading the view.
[self registerForKeyboardNotifications];
cellArray = [[NSMutableArray alloc] initWithObjects:_cell0, _cell1, _cell2, _cell3, _cell4, _cell5, _cell6, _cell7, _cell8, _cell9, _cell10, _cell11, _cell12, _cell13, _cell14, _cell15, nil];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [cellArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
return [cellArray objectAtIndex:indexPath.row];
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
if (textField == _input0) {
[cellArray removeObject:_cell1];
[_tableView reloadData];
}
activeField = textField;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
activeField = nil;
}
- (void)registerForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
}
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height+100, 0.0);
_tableView.contentInset = contentInsets;
_tableView.scrollIndicatorInsets = contentInsets;
// If active text field is hidden by keyboard, scroll it so it's visible
// Your app might not need or want this behavior.
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
[_tableView scrollRectToVisible:activeField.frame animated:YES];
}
}
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
_tableView.contentInset = contentInsets;
_tableView.scrollIndicatorInsets = contentInsets;
}```