iPhone: отклонить клавиатуру, когда пользователь касается фона - PullRequest
2 голосов
/ 17 мая 2011

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

Я хотел бы закрыть клавиатуру, когда пользователь нажимает на фон. Обычно это было бы легко, за исключением того, что мои UITextField объекты находятся внутри UIScrollView, что делает его таким образом, что я не могу отловить сенсорные события (UIScrollView глотает их, чтобы они не достигли базового вида). Один из способов обойти это - зарегистрироваться для универсального жеста (касание), но при этом ловятся все касания, включая те, которые предназначены для кнопки отправки.

По сути, 'touchesBegan: withEvent:' не будет работать, потому что он никогда не вызывается, а жесты не будут работать, потому что они не учитывают нажатия кнопок.

Вот вопрос: есть ли способ обнаружить простое нажатие на UIScrollView? Как только я обнаружу кран, я знаю, как сделать все остальное. Спасибо!

Ответы [ 2 ]

2 голосов
/ 17 мая 2011

Вы не можете использовать touchesBegan:withEvent в суперпредставлении scrollview, но как насчет создания подкласса UIScrollView и обработки касания там?Затем вы можете нормально продолжить вызов реализации super, чтобы не наступать на пальцы UIScrollView:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    /* Insert code to dismiss keyboard if needed */

    // This makes sure scrolling proceeds normally.
    [super touchesBegain:touches withEvent:event];
}
0 голосов
/ 01 марта 2013

Я тоже столкнулся с той же проблемой. В то время как в IOS 6.0 он работал нормально, но как только я перешел на IOS 5.0, он начал показывать то же поведение, о котором вы упоминали.

Тренировка для IOS 5.0 - Вы должны использовать UITapGestureRecognizer. Затем установите для его делегата значение self и реализуйте следующий метод делегата

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;

в

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    return ! ([touch.view isKindOfClass:[UIControl class]]);
}
@end

приведенный выше код будет проверять, что объект касания не является UIButton или каким-либо элементом управления, а затем обрабатывать только касание

Надеюсь, это решит вашу проблему.

...