Я наткнулся на эту проблему, и я не уверен, что было бы лучшим способом справиться с ней. Вопрос очень прост в воспроизведении, и я положил a simple demo project on GitHub for demonstration, но вот суть этого.pointInside: withEvent: вызывается при наборе текста на клавиатуре на iOS8
Предположим, у меня есть приложение для iPad с UITextField в его главном представлении. Ниже небольшой UIView подкласс, который реализует pointInside: withEvent:
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
BOOL inside = CGRectContainsPoint(self.bounds, point);
NSLog(@"pointInside Called");
return inside;
}
Запуск приложения, метод pointInside вызывается, если я нажимаю в любом месте на экране, но с клавиатуры; ввод текста на клавиатуре не вызывает метод pointInside.
Оставаясь на клавиатуре, я отправляю приложение в фоновом режиме, а затем возвращаюсь в приложение. Теперь, каждый раз, когда я набираю текст на клавиатуре, вызовется метод pointInside! Единственный способ, по которому я решил «исправить» проблему, - установить UITextEffectsWindow как keyAndVisible; но это не реально жизнеспособно, так как это может привести к другим побочным эффектам.
Любая идея, как с этим бороться? Моя проблема в том, что мы использовали этот метод в нашем приложении, чтобы отклонить всплывающее окно, когда пользователь выходит за его пределы. Но есть UITextField во всплывающем окне, и мы, очевидно, не хотят отказаться от всплывающих окон, когда пользователь начинает вводить в него ...
Заранее спасибо
Причиной всех ложных срабатываний является система координат. Код спрашивает, находится ли касание в пределах видимости, получающей прикосновение. Конечно, это является. Вместо этого проверьте точку на каком-то кадре subview. Еще лучше прикрепите распознаватель жестов к виду (окнам), где крана должна заставить текстовое поле сбрасывать первый ответчик. – danh
, но точка находится в поле зрения координат –
Это не объясняет, почему pointInside не вызывается при наборе текста на клавиатуре до того, как приложение переходит на задний план, но потом. Проверка работает нормально, и нет ложных срабатываний. Единственная проблема заключается в том, что метод вызывается при наборе текста на клавиатуре в одном случае, а не в другом. – droussel