Как включить несколько сегментов UISegmentedControl?

Допустим, мой UISegmentedControl имеет 8 пронумерованных сегментов. Я бы хотел, чтобы пользователь мог включить 2, 3 или более из них одновременно. Переключая их. По существу, как бит в байте. Это возможно? Я считаю, что это на обычной Mac OS X, но я не могу найти способ сделать это в iPhone SDK.

Если мне нужно смоделировать это, поместив кнопки в представление, есть ли способ сделать следующее:

  1. Закруглите углы просмотра, чтобы он выглядел как "барный" стиль UISegmentedControl?
  2. Использовать встроенные фоны в стиле "бар" на кнопках?
  3. Дать кнопкам тень, как у всего стиля "бар"? (не текст)

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
    }
}
Другие вопросы по тегам