Мое приложение требует, чтобы в лист действий были добавлены следующие элементы.
- UIToolbar
- Кнопка на UIToolbar
- UIPicker Control
Я добавил изображение, чтобы понять мои требования.
Не могли бы вы объяснить, как это можно реализовать?
ios
iphone
uipickerview
actionsheetpicker
Сагар Р. Котари
источник
источник
Ответы:
Обновление для iOS 7
Документы Apple для UIActionSheet :
UIActionSheet is not designed to be subclassed, nor should you add views to its hierarchy
Я рекомендую не пытаться настраивать содержимое ActionSheet, поскольку это может привести к серьезным ошибкам недопустимого контекста в iOS 7. Я просто потратил несколько часов на решение этой проблемы и в конечном итоге решил использовать другой подход. Я заменил вызов для отображения листа действий на контроллер модального представления, содержащий простое табличное представление.
Есть много способов добиться этого. Вот один из способов, который я только что реализовал в текущем проекте. Это приятно, потому что я могу повторно использовать его на 5 или 6 разных экранах, где все пользователи могут выбирать из списка параметров.
SimpleTableViewController
.SimpleTableViewControllerDelegate
с требуемым методомitemSelectedatRow:
и слабым свойством, называемым делегатом типаid<SimpleTableViewControllerDelegate>
. Таким образом мы передадим выбор обратно родительскому контроллеру.itemSelectedatRow:
вtableView:didSelectRowAtIndexPath:
.Дополнительным преимуществом этого подхода является возможность многократного использования. Для использования импортируйте класс SimpleTableViewController в свой ViewController.h, согласитесь с SimpleTableViewDelegate и реализуйте
itemSelectedAtRow:
метод. Затем, чтобы открыть модальное окно, просто создайте экземпляр нового SimpleTableViewController, установите данные таблицы и делегируйте их, а затем представьте их.Создаю простой пример и размещаю на github .
Также см. Отображение таблицы действий вызывает ошибки недопустимого контекста CGContext .
источник
Еще одно решение:
нет панели инструментов, но есть сегментированный элемент управления (eyecandy)
источник
Несмотря на то, что это старый вопрос, я быстро упомяну, что я собрал класс ActionSheetPicker с удобной функцией, поэтому вы можете создать ActionSheet с UIPickerView в одной строке. Он основан на коде из ответов на этот вопрос.
Изменить: теперь он также поддерживает использование DatePicker и DistancePicker.
UPD:
Эта версия устарела: используйте вместо нее ActionSheetPicker-3.0 .
источник
ActionSheetDatePicker
режиме вы можете добавить несколько кнопок на панель инструментов сверху. Возможно ли это и с обычнымActionSheetStringPicker
?Ага ! Наконец-то нахожу.
реализуйте следующий код в событии нажатия кнопки, чтобы отобразить лист действий, как показано на изображении вопроса.
источник
Отличное решение Марсио на этот вопрос очень помогло мне в добавлении любых подвидов в таблицу UIActionSheet.
По причинам, которые (пока) мне не совсем понятны, границы UIActionSheet могут быть установлены только после того, как он был отображен; оба решения sagar и marcio успешно решают эту проблему с помощью сообщения setBounds: CGRectMake (...), отправляемого в таблицу действий после его отображения.
Однако установка границ UIActionSheet после того, как лист был отображен, создает скачкообразный переход при появлении ActionSheet, где он «появляется» в поле зрения, а затем прокручивается только на последних 40 пикселях или около того.
При изменении размера UIPickerView после добавления подпредставлений я рекомендую обернуть сообщение setBounds, отправленное в actionSheet, внутри блока анимации. Это сделает вход в actionSheet более плавным.
источник
Для тех парней, которые пытаются найти функцию DatePickerDoneClick ... вот простой код, чтобы закрыть лист действий. Очевидно, что aac должен быть ivar (тот, который входит в ваш файл с расширением .h)
источник
Я действительно не понимаю, почему
UIPickerView
внутриUIActionSheet
. Это кажется беспорядочным и хакерским решением, которое может быть взломано в будущем выпуске iOS. (У меня были такие вещи, как этот перерыв в приложении раньше, гдеUIPickerView
не отображалось при первом нажатии, и его приходилось исправлять - странные причуды сUIActionSheet
).Я просто реализовал a,
UIPickerView
а затем добавил его в качестве подпредставления к моему представлению и оживил его, двигаясь вверх, как если бы он был представлен как лист действий.источник
Чтобы добавить к удивительному решению marcio,
dismissActionSheet:
можно реализовать следующее.Добавьте этот метод в свой код.
источник
Я думаю, это лучший способ сделать это.
ActionSheetPicker-3,0
Это почти то, что предлагают все, но использует блоки, что приятно!
источник
Начиная с iOS 8, вы не можете, это не работает, потому что Apple изменила внутреннюю реализацию
UIActionSheet
. См. Документацию Apple :источник
Мне понравился подход Wayfarer и flexaddicted, но я обнаружил (как и aZtral), что он не работает, поскольку backgroundTapButton был единственным элементом, который реагировал на взаимодействие с пользователем. Это заставило меня поместить все три его подпредставления: _picker, _pickerToolbar и backgroundTapButton внутрь содержащего представления (всплывающего окна), которое затем анимировалось на экране и за его пределами. Мне также нужна была кнопка «Отмена» на панели _pickerToolbar. Вот соответствующие элементы кода для всплывающего представления (вам необходимо предоставить собственный источник данных средства выбора и методы делегирования).
источник