Ответ к touchesBegan в UIPickerView вместо UIView

У меня есть UIPickerView, который постепенно исчезается к 20%-й альфе, если не используемой. Я хочу, чтобы пользователь смог затронуть, средство выбора и иметь его отходят назад в.

Я могу заставить это работать, если я поместил touchesBegan метод на основное Представление, но это только работает, когда пользователь касается Представления. Я пытался разделить UIPickerView на подклассы и иметь touchesBegan там, но он не работал.

Я предполагаю, что это - что-то, чтобы сделать с цепочкой Респондента, но, может казаться, не разрабатывает его.

6
задан JamesSugrue 20 February 2009 в 00:02
поделиться

1 ответ

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

Извините, если мой язык не очень технический, но я довольно новичок в 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.

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

10
ответ дан 8 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: