如何启用UISegmentedControl的多个段?

时间:2009-06-22 21:48:14

标签: iphone uisegmentedcontrol

让我们说我的UISegmentedControl有8个编号的段。我希望用户能够一次打开2,3或更多。切换他们。基本上就像一个字节中的位。这可能吗?我相信它是在普通的Mac OS X上,但我似乎无法在iPhone SDK中找到一种方法。

如果我必须通过将按钮放入视图来模拟这个,有没有办法执行以下操作:

  1. 围绕视图的角落,使其看起来像“bar”样式UISegmentedControl?
  2. 使用按钮上的“条形”样式的内置背景?
  3. 给按钮一个像整个“酒吧”风格一样的阴影? (不是文字)

6 个答案:

答案 0 :(得分:8)

使用UIKit是不可能的。我建议创建一个自定义控件或一组UISwitch控件,代表UISegmentedControl中的每个选项。

答案 1 :(得分:7)

这是我发现的最佳自定义控件,允许同时选择多个段:

https://github.com/yonat/MultiSelectSegmentedControl

这是UISegmentedControl的子类,很方便。我在这里分叉了:

https://github.com/stewartmacdonald/MultiSelectSegmentedControl

并在自述文件中添加了一些代码示例,并添加了一个方法,允许您获取所有选定段的标题的NSArray。

答案 2 :(得分:2)

我认为最简单的方法是使用UIButton创建自己的分段控件。

答案 3 :(得分:1)

现在似乎有办法在XCode中执行此操作。在“属性”检查器中,有一个包含“细分”,“标题”,“图像”,“行为”的部分。行为选项为“已启用”和“已选择”。您可以为多个细分选择“已选择”。

答案 4 :(得分:0)

我建议您尝试https://github.com/tayhalla/THSegmentedControl
它是UISegmentedControl的实际子类,因此它非常适合Interface builder和所有内容。

答案 5 :(得分:0)

为来自Google的人解答:现在可以更改UISegmentedControl的行为。转到检查器->模式->选择任何而不是选择一个。 为了找出选择了哪些段,我建议创建一个像这样的函数:

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
    }
}