UIView убирает статус первого респондента

Представьте себе ситуацию, когда вы поместили UITableView в UIScrollView. Если вы нажмете на табличный вид и начнете вертикальное перемещение - UITableView станет первым респондентом и будет прокручиваться по вертикали. Но если вы будете двигать пальцем по горизонтали - UIScrollView станет первым респондентом и будет прокручиваться по горизонтали.

У меня аналогичная ситуация, но вместо UIScrollView у меня есть простой объект UIView, который перехватывает события - (void) touchesMoved: и перемещается (своего рода самодельный ScrollView).

Но как я могу сделать тот же трюк, что и UIScrollView - определить горизонтальное перемещение и убрать статус первого респондента из UITableView ???

Заранее спасибо!!!


person Dmitry    schedule 02.03.2011    source источник
comment
Возможно, UIScrollView не удаляет первого респондента из UITableView. Вместо этого может быть уловка, заключающаяся в том, что UITableView не заинтересован в смахивании и передает его по цепочке респондентов. Почему бы вам не попробовать включить смахивание для удаления в таблице и посмотреть, получится ли в этом случае горизонтальная прокрутка.   -  person Bogatyr    schedule 02.03.2011
comment
ок, идею понял, завтра попробую и напишу обратно. Спасибо   -  person Dmitry    schedule 03.03.2011
comment
Неа. после удаления таблицы статус первого респондента где-то потерялся. В любом случае, UIView не получает статус первого респондента после удаления UITableView. Любые идеи???   -  person Dmitry    schedule 03.03.2011
comment
Я нашел, как удалить статус первого респондента из UITablView. Просто переопределите методы touchShouldCancelInContentView и touchesShouldBegin. Но как присвоить статус первого респондента другому представлению ???   -  person Dmitry    schedule 03.03.2011


Ответы (2)


Вы можете попробовать переопределить canBecomeFirstResponder в вашем представлении и вернуть соответствующее значение в подходящее время.

person TomSwift    schedule 02.03.2011
comment
когда эти методы будут вызваны? Я просто попытался разместить его на своем UIView (самодельный режим прокрутки), и он вообще не вызывается .. - person Dmitry; 02.03.2011
comment
также, как я понимаю, canBecomeFirstResponder должен вызываться один раз в начале, но мне нужно время, чтобы определить горизонтальное или вертикальное перемещение - person Dmitry; 02.03.2011

Вы пробовали использовать UIPanGestureRecodnizer в представлении. Затем вы сможете установить @selector, который позволит вам обрабатывать рассматриваемое событие. Также с помощью панорамирования вы можете изменить только элемент x и оставить элемент y в покое. Более того, с элементом панорамирования, прикрепленным к представлению, вам не придется беспокоиться о том, что у вас есть первый респондент. Элементы панорамирования можно часто использовать в качестве элемента прокрутки, если у вас было ускорение или замедление. Помимо этого, я бы сказал, что вы также можете добавить элемент UISwipeGestureRecognizer слева и справа, но я не думаю, что вы получите такую ​​информацию, как то, как далеко пользователь смахнул значение, если вы хотите, чтобы экран возвращался, когда пользователь не продвинулся достаточно далеко, чтобы вправо или влево, тогда у вас не будет такой возможности. Кроме того, смахивание не даст того же эффекта, что и UIScrollView, но UIPanGestureRecognizer может, если вы сделаете небольшое дополнительное кодирование. Дополнительным кодированием будет наблюдение за положением значения x, а затем использование небольшой анимации для привязки представления вправо или влево, когда пользователь отпускает представление. Другое дело, что вид должен и будет следовать за пальцем, если вы правильно установите x.

person Rob    schedule 13.04.2012