Как включить несколько сегментов UISegmentedControl?
Допустим, мой UISegmentedControl имеет 8 пронумерованных сегментов. Я бы хотел, чтобы пользователь мог включить 2, 3 или более из них одновременно. Переключая их. По существу, как бит в байте. Это возможно? Я считаю, что это на обычной Mac OS X, но я не могу найти способ сделать это в iPhone SDK.
Если мне нужно смоделировать это, поместив кнопки в представление, есть ли способ сделать следующее:
- Закруглите углы просмотра, чтобы он выглядел как "барный" стиль UISegmentedControl?
- Использовать встроенные фоны в стиле "бар" на кнопках?
- Дать кнопкам тень, как у всего стиля "бар"? (не текст)
5 ответов
Это невозможно с помощью UIKit. Я бы порекомендовал создать пользовательский элемент управления или массив UISwitch
элементы управления, представляющие каждый из параметров в вашем UISegmentedControl.
Это лучший пользовательский элемент управления, который я нашел, который позволяет одновременно выбирать несколько сегментов:
https://github.com/yonat/MultiSelectSegmentedControl
Это подкласс UISegmentedControl, что удобно. Я разветвлял это здесь:
https://github.com/stewartmacdonald/MultiSelectSegmentedControl
и добавил несколько примеров кода в ReadMe и добавил метод, который позволяет вам получить NSArray заголовков всех выбранных сегментов.
Я думаю, что самый простой способ - создать свой собственный сегментированный контроль с помощью UIButton.
Marco
Похоже, сейчас есть способ сделать это в XCode. В инспекторе атрибутов есть раздел с сегментом, заголовком, изображением, поведением. Варианты поведения: "Включен" и "Выбран". Вы можете выбрать "Выбрано" для нескольких сегментов.
Я рекомендую вам попробовать https://github.com/tayhalla/THSegmentedControl
это фактический подкласс UISegmentedControl
так что он хорошо вписывается в интерфейс конструктора и все такое.
Ответ для тех, кто перейдет сюда из Google: теперь можно изменить поведение UISegmentedControl. Перейдите в Inspector -> Mode -> Select Any вместо Select One. Чтобы узнать, какие сегменты выбраны, я предлагаю создать такую функцию:
extension UISegmentedControl {
func getBarState() -> [Bool] {
var states: [Bool] = []
for i in 0..<segmentCount {
states.append(isEnabledForSegment(forSegment: i))
}
return states
}
}
Поскольку Google привел меня сюда во время поиска версии OSX, я также опубликую рабочее решение для NSSegmentedControl:
extension NSSegmentedControl {
func getBarState() -> [Bool] {
var states: [Bool] = []
for i in 0..<segmentCount {
states.append(isSelected(forSegment: i))
}
return states
}
}