Я гуглил, как отключить клавиатуру при прикосновении к пустой области в UITableView в iOS, и есть несколько способов решить эту проблему. Например, при использовании делегата, UITapGestureRecognizer, - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
и - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
.
Я решил взять hitTest, создав подкласс соответствующего класса UIView и переопределив этот метод следующим образом:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *result = [super hitTest:point withEvent:event];
[self endEditing:YES];
return result;
}
Это действительно работает, отключает виртуальную клавиатуру, когда я касаюсь / прокручиваю / прокручиваю / зажимаю ... где-то еще, но появляется другая проблема.
Клавиатура активна или отображается, когда я касаюсь одного объекта UITextField, затем я касаюсь того же объекта UITextField, вот проблема, клавиатура пытается закрыться, но не полностью, где-то в середине она начинает появляться, делая такого рода странная анимация. В большинстве случаев в наших приложениях клавиатура должна оставаться неподвижной, когда мы касаемся одного и того же объекта UITextField. Есть ли хороший и простой способ решить эту проблему?
Решено: Наконец-то я разобрался сам. Благодаря @Wain, благодаря подсказке @Wain. Я проверяю result
перед вызовом [self endEditing:YES];
. Вот измененный код:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *result = [super hitTest:point withEvent:event];
// You can change the following condition to meet your own needs
if (![result isMemberOfClass:[UITextField class]] && ![result isMemberOfClass:[UITextView class]]) {
[self endEditing:YES];
}
return result;
}
result
перед завершением сеанса редактирования? - person Wain   schedule 26.06.2014result
объектом UITextField, вернуться напрямую и пропустить endEditing, можете ли вы описать более подробно? - person iBCode   schedule 26.06.2014-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
не работает, если представление является подклассом из UIScrollView. Между тем, я переопределяю этот метод в подклассе UITableView, поэтому это может привести к ошибке, если я заменю[self endEditing:YES];
на[self.view endEditing:YES];
, потому чтоself
- это само представление. - person iBCode   schedule 26.06.2014[self.scrollView endEditing:YES]
вызовет синтаксическую ошибку. Посколькуself
указывает на вид, как я уже сказал,self
— это сам вид. - person iBCode   schedule 26.06.2014