Любые идеи о том, как сделать UIPickerView с нуля? - PullRequest
1 голос
/ 23 апреля 2011

Я решил, что больше не хочу использовать UIPickerView ... он абсолютно негибкий с точки зрения функциональности, дизайна и размера (высоты). Он также иногда застревает между строками, и задержка, возникающая между отпусканием колеса и запуском метода делегата, указывающим, что была выбрана новая строка (из-за анимации «установки»), вызывала много проблем в контекст приложений, над которыми я работал.

При этом удобные для пользователя аспекты UIPickerView хороши, и я хотел бы попытаться воспроизвести его. Я пытался исследовать разные способы, как это можно сделать, но без особого успеха. У кого-нибудь есть идеи относительно того, что может быть сделано для создания чего-то похожего с нуля?

Я пытался заставить подкласс UITableView вести себя так, чтобы любая ячейка, которая в данный момент находилась в середине таблицы (она изменялась при перетаскивании и т. Д.), Меняла цвет фона на что-то другое, подразумевая, что «выбран». Как только таблица была перетащена так, что «выбранная» ячейка больше не находилась посередине, ячейка вернется в нормальное состояние, а новая средняя ячейка изменит цвет. Так что это будет похоже на UIPickerView в том смысле, что вам не нужно нажимать на ячейку; вместо этого вы просто перетаскиваете, чтобы выбрать один по умолчанию.

Я подумал, что должно быть достаточно легко перехватить метод "touchesMoved" UITableView и добавить некоторый код, который проходит по всем видимым в данный момент ячейкам таблицы, проверяя, не перекрывают ли их кадры центральную точку таблицы, и соответственно изменяя их внешний вид (плюс отправляя уведомление другим классам по мере необходимости, чтобы указать изменение «выбора»). К сожалению, я не могу заставить это работать, так как метод "touchesMoved" не вызывается, когда я перетаскиваю таблицу. Я что-то упускаю из виду?

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

Большое спасибо,

Chris

1 Ответ

4 голосов
/ 23 апреля 2011

Помните, что UITableView является подклассом UIScrollView, и UITableViewDelegate получает все вызовы метода UIScrollViewDelegate. scrollViewDidScroll: звучит так, как если бы вы знали, когда прокручивается представление таблицы.

Что касается нахождения какой строки находится в середине вида, просто используйте indexPathForRowAtPoint:.

...