Ответ 1
для этой проблемы лучше всего вы код scrollviewDelegete и просто укажите, когда вы хотите убрать клавиатуру через ResignFirstResponder
Я только что нашел раздражающую ошибку с новым свойством keyboardDismissMode
scroll view
. При использовании этого параметра с text view
со значением UIScrollViewKeyboardDismissModeInteractive
и клавиатура отклоняется, scroll view
, кажется, прыгает вверх, пока не продолжает замедляться.
Я отправил отчет об ошибке в Apple, но мне нужно обходное решение. Я пробовал DAKeyboardControl
без новой поддержки iOS7
, которая за кулисами использует keyboardDismissMode
, и она по-прежнему делает это, что для меня указывает, что это гораздо более глубокая проблема.
Любые предложения?
для этой проблемы лучше всего вы код scrollviewDelegete и просто укажите, когда вы хотите убрать клавиатуру через ResignFirstResponder
Кажется, это ошибка или просто не идеальное состояние по умолчанию. Но на основе кода в тестовом проекте что-то вроде ниже может работать после некоторой тонкой настройки.
Есть две проблемы с образцом кода: вы не делаете ничего о размере текста, когда клавиатура появляется, поэтому вы не можете использовать или видеть текст под клавиатурой. Существуют и другие решения, но быстрое и грязное решение заключается в изменении размера фрейма (в приложении для представления я бы также захватил информацию о анимации и анимировал изменение кадра представления, чтобы соответствовать анимации клавиатуры, которая выходит за рамки этого вопроса). Вы делаете это в 'willShow' или тому подобное, и возвращаете его обратно в 'didHide' или тому подобное.
Затем смещение содержимого затухает, когда оно скрыто, и, похоже, некоторые странные состояния, пока вы перетаскиваете его за кадром перед и вокруг ваших обратных вызовов, чтобы скрывать и просматривать изменения прокрутки. Я просто сохраняю состояние и "исправляю" его, как только клавиатура уходит, и я обновил текстовое представление.
Я создал несколько свойств и выход в раскадровке, чтобы выплыть с текстовым видом.
- (void) viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; } - (void) keyboardWillShow:(NSNotification *)notification { NSDictionary * info = [notification userInfo]; CGSize size = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; CGRect rect = self.textView.frame; rect.size.height -= size.height; self.textView.frame = rect; } - (void)keyboardDidHide:(NSNotification *)notification { NSLog(@"====== keyboardDidHide ======="); NSDictionary * info = [notification userInfo]; CGSize size = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; CGRect rect = self.textView.frame; rect.size.height += size.height; self.textView.frame = rect; self.hidingKeyboard = YES; } - (void) scrollViewDidScroll:(UIScrollView *)scrollView { NSLog(@"%f", scrollView.contentOffset.y); if(self.hidingKeyboard == YES) { scrollView.contentOffset = self.lastOffset; self.hidingKeyboard = NO; NSLog(@"====== reset ======="); } else self.lastOffset = scrollView.contentOffset; }