14

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

如果我必须通过将按钮放入视图来模拟这一点,是否有任何方法可以执行以下操作:

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

6 回答 6

9

更新:我在这里提到的自定义控件不再适用于 iOS 13。

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

https://github.com/yonat/MultiSelectSegmentedControl

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

https://github.com/stewartmacdonald/MultiSelectSegmentedControl

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

于 2015-06-03T09:57:17.710 回答
8

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

于 2009-06-22T21:55:26.147 回答
2

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

马可

于 2009-06-22T21:54:46.133 回答
1

现在似乎有一种方法可以在 XCode 中执行此操作。在 Attributes Inspector 中,有一个包含 Segment、Title、Image、Behavior 的部分。行为选项为“已启用”和“已选择”。您可以为多个段选择“已选择”。

于 2012-02-08T23:29:12.163 回答
0

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

于 2014-10-15T19:38:26.620 回答
0

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

extension UISegmentedControl {
    func getBarState() -> [Bool] {
        var states: [Bool] = []
        for i in 0..<segmentCount {
            states.append(isEnabledForSegment(forSegment: i))
        }
        return states
    }
}

当谷歌在搜索 OSX 版本时将我带到这里时,我还将发布 NSSegmentedControl 的工作解决方案:

extension NSSegmentedControl {
    func getBarState() -> [Bool] {
        var states: [Bool] = []
        for i in 0..<segmentCount {
            states.append(isSelected(forSegment: i))
        }
        return states
    }
}
于 2020-03-28T11:18:37.347 回答