UITextField в UITableView tableFooterView отскакивает от экрана на resignFirstResponder

Я искал и искал эту проблему, и я признаю, что, возможно, что-то упустил, но у меня нет идей.

У меня есть UITextField в UITableView tableFooterView в моем mainClass:

// Set table footer
PAPPhotoDetailsFooterView *footerView = [[PAPPhotoDetailsFooterView alloc] initWithFrame:[PAPPhotoDetailsFooterView rectForView]];
commentTextField = footerView.commentField;
commentTextField.delegate = self;
self.tableView.tableFooterView = footerView;

TextField настраивается в классе PAPPhotoDetailsFooterView следующим образом:

 commentField = [[UITextField alloc] initWithFrame:CGRectMake( 25.0f, 10.0f, 227.0f, 31.0f)];
 commentField.font = [UIFont systemFontOfSize:kCommentCellContentLabelFontSize];
 commentField.placeholder = @"Name photo";
 commentField.returnKeyType = UIReturnKeySend;
 commentField.autocapitalizationType = UITextAutocapitalizationTypeNone;
 commentField.autocorrectionType = UITextAutocorrectionTypeNo;
 commentField.textColor = [UIColor colorWithRed:73.0f/255.0f green:55.0f/255.0f blue:35.0f/255.0f alpha:1.0f];
 commentField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
 [commentField setValue:[UIColor colorWithRed:154.0f/255.0f green:146.0f/255.0f blue:138.0f/255.0f alpha:1.0f] forKeyPath:@"_placeholderLabel.textColor"]; 
 [mainView addSubview:commentField];

Вот мой метод textFieldShouldReturn в моем mainClass:

#pragma mark - UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField *)textField {

    // Call method to store comment
    NSString *trimmedComment = [textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    [self parseAndStoreComment:trimmedComment];

    // Reset the text field
    [textField setText:@""];
    return  [textField resignFirstResponder];

}

И мои методы клавиатуры:

- (void)keyboardWillShow:(NSNotification*)note {
    // Scroll the view to the comment text box
    NSDictionary* info = [note userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;   
    [self.tableView setContentOffset:CGPointMake(0.0f, self.tableView.contentSize.height-kbSize.height) animated:YES];

}


- (void)keyboardWillHide:(NSNotification*)note {       
    [self.tableView setContentOffset:CGPointMake(0.0f, self.tableView.tableFooterView.frame.origin.y) animated:YES];
}

Происходит следующее: когда я нажимаю на textField -OR-, когда нажимаю клавишу return на клавиатуре, то tableView, кажется, прокручивает до того, что я установил в keyboardWillHide, но затем сразу же после этого он быстро прокручивается вверх, где полностью открывается tableView и закадровый.

Я пытался установить анимацию setContentOffset до 2,0 секунд keyboardWillHide, чтобы увидеть, что происходит, и это приведет к тому, что заданное мной значение contentOffset будет прокручиваться в течение 2 секунд, но затем сразу же будет сниматься за кадром.

Что-то прокручивает tableView после того, как мой код прокручивает его, но я понятия не имею, что это такое.

1 ответ

Итак, я понял, что это происходит только на симуляторе. Я тестировал приложение как на симуляторе, так и на устройстве, но, думаю, каждый раз, когда я пытался отладить эту проблему, я тестировал только на симуляторе.

Не уверен, почему это происходит на симуляторе.

Другие вопросы по тегам