Обнаружение хитов в UIScrollView, позволяя ему делать свое дело - PullRequest
0 голосов
/ 09 января 2011

Есть ли простой способ обнаружить, если кто-то коснулся UIScrollView без необходимости отключать взаимодействие с пользователем?.

Я знаю, что на этот вопрос уже отвечали несколько раз, но каждый ответ, который я нахожу, это то, что кто-то хочет обнаружить попадания в изображение. У меня нет изображения. У меня есть вид прокрутки с несколькими текстовыми полями, встроенными в него. Раньше они были внутри UIControl, из которого я мог обнаружить touchDown и вызвать resignFirstResponder во всех моих текстовых полях (когда клавиатура включена). Но когда они находятся в UIScrollView, я не могу найти простой способ сделать это.

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

Спасибо за любую помощь,

J

Ответы [ 3 ]

2 голосов
/ 09 января 2011

Переопределите touchesBegan, выполните свою обработку и вызовите супер реализацию, чтобы представление прокрутки все еще получало сообщение.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    //call resignFirstResponder
    [super touchesBegan:touches withEvent:event];
}
0 голосов
/ 16 ноября 2013

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

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

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

И это не так больно. Просто добавьте протокол, затем добавьте функции, необходимые для обнаружения.

В представлении (классе), содержащем UIScrolView, добавьте протокол, затем добавьте все функции из здесь в ваше представление (класс).

Пример:

// --------------------------------
// In the "h" file:
// --------------------------------
@interface myViewClass : UIViewController  <UIScrollViewDelegate> // <-- Adding the protocol here

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView;


// --------------------------------
// In the "m" file:
// --------------------------------
@implementation BlockerViewController
UIScrollView *scrollView;

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    NSLog(@"end decel");
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    NSLog(@"end dragging");
}

// All of the available functions are here:
// https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScrollViewDelegate_Protocol/Reference/UIScrollViewDelegate.html
0 голосов
/ 09 января 2011

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

Я добавил это в свой viewDidLoad:

UITapGestureRecognizer * singleTap = [[UITapGestureRecognizer alloc] initWithTarget: собственное действие: @selector (backgroundTap:)];

[scrollView addGestureRecognizer: singleTap];

Где backgroundTap равен

- (IBAction) backgroundTap: (id) отправитель

- это функция, которую я первоначально вызывал из touchDown в UIControl для отставки всех клавиатур firstResponders.

Это прекрасно работает и добавляет очень мало кода.И мне НЕ нужно отключать взаимодействие с пользователем!Yay!

Спасибо всем за ваши комментарии и помощь.

J

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...