У меня есть UIPickerView, который постепенно исчезается к 20%-й альфе, если не используемой. Я хочу, чтобы пользователь смог затронуть, средство выбора и иметь его отходят назад в.
Я могу заставить это работать, если я поместил touchesBegan метод на основное Представление, но это только работает, когда пользователь касается Представления. Я пытался разделить UIPickerView на подклассы и иметь touchesBegan там, но он не работал.
Я предполагаю, что это - что-то, чтобы сделать с цепочкой Респондента, но, может казаться, не разрабатывает его.
Я искал решение этой проблемы больше недели. Я отвечаю вам, даже если вашему вопросу больше года, надеясь, что это поможет другим.
Извините, если мой язык не очень технический, но я довольно новичок в Objective-C и разработке iPhone.
Подкласс UIpickerView - это правильный способ сделать это. Но вы должны переопределить метод - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
. Этот метод вызывается всякий раз, когда вы касаетесь экрана, и возвращает представление, которое будет реагировать на касание. Другими словами, будет вызван вид, чей touchesBegan:withEvent:
метод.
UIPickerView имеет 9 вложенных представлений! В реализации класса UIPickerView - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
не вернет self
(это означает, что touchesBegan:withEvent:
, который вы напишете в подклассе, не будет вызван), но вернет вложенное представление, именно представление с индексом 4 (недокументированный подкласс UIPickerTable).
Фокус в том, чтобы сделать метод - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
возвращающим self
, чтобы у вас был контроль над методами touchesBegan:withEvent:
, touchesMoved:withEvent:
и touchesEnded:withEvent:
.
В этих методах, чтобы сохранить стандартные функциональные возможности UIPickerView, вы ДОЛЖНЫ не забыть вызвать их снова, но уже на вложенном представлении UIPickerTable.
Надеюсь, это имеет смысл. Я не могу написать код сейчас, как только я буду дома, я отредактирую этот ответ и добавлю немного кода.