【问题标题】:UISegmentedControl with multiple row具有多行的 UISegmentedControl
【发布时间】:2018-04-30 16:40:46
【问题描述】:

我需要一个 2 行的 UISegmentedControl,我无法实现它。 我不想使用 2 个不同的 UISegmentedControl。这个问题有什么解决办法吗?如何实现两行 UISegmentedControl?

【问题讨论】:

  • 创建一个包含 2 个分段控件的自定义视图,并将它们的状态绑定在一起。当你从用户那里得到动作时,设置另一个的索引,给错觉它的 1 控制?
  • 自己创建一个分段控件非常简单,你真的不需要依赖iOS提供的。

标签: ios objective-c uisegmentedcontrol


【解决方案1】:

'UISegmentedControl' 不支持多行。如果您需要它,您必须自己构建它或找到提供它的第三方库。

正如 Helium 在他/她的评论中所建议的那样,您可以创建一个自定义控件,该控件在内部管理 2 个或更多分段控件并处理它们之间的变化状态。

说实话,分段控件并没有那么复杂。创建自定义 2D 分段控件并不难。如果这是一个关键需求,那么您可能想要走这条路。

【讨论】:

    【解决方案2】:

    基本上,您需要在每个分段控件上都有一个 IBAction 和 IBOutlet。

    对 IBAction 进行编码,以便单击其中一个分段控件会将 IBOutlet 的其他分段控件(未选中)的 selectedSegmentIndex 设置为 UISegmentedControlNoSegment。这会产生分段控件链接的错觉。

    那么获得选择了哪个分段控件值的正确信息就是将分段控件的所有索引收集到一个常量中。

    @IBOutlet weak var segment1: UISegmentedControl!
    @IBOutlet weak var segment2: UISegmentedControl!
    @IBOutlet weak var segment3: UISegmentedControl!
    @IBAction func FirstSecond(_ sender: UISegmentedControl) {
        segment2.selectedSegmentIndex = UISegmentedControlNoSegment
        segment3.selectedSegmentIndex = UISegmentedControlNoSegment
    }
    @IBAction func ThirdFourth(_ sender: UISegmentedControl) {
        segment1.selectedSegmentIndex = UISegmentedControlNoSegment
        segment3.selectedSegmentIndex = UISegmentedControlNoSegment
    }
    @IBAction func FifthSixth(_ sender: UISegmentedControl) {
        segment1.selectedSegmentIndex = UISegmentedControlNoSegment
        segment2.selectedSegmentIndex = UISegmentedControlNoSegment
    }
    let segmentvalue = ["First","Second","Third","Fourth","Fifth","Sixth"]
    @IBAction func FirstSecond(_ sender: UISegmentedControl) {
        segment2.selectedSegmentIndex = UISegmentedControlNoSegment
        segment3.selectedSegmentIndex = UISegmentedControlNoSegment
        let valueINeed = segmentvalue[segment1.selectedSegmentIndex]
    }
    @IBAction func ThirdFourth(_ sender: UISegmentedControl) {
        segment1.selectedSegmentIndex = UISegmentedControlNoSegment
        segment3.selectedSegmentIndex = UISegmentedControlNoSegment
        let valueINeed = segmentvalue[segment2.selectedSegmentIndex + 2]
    }
    @IBAction func FifthSixth(_ sender: UISegmentedControl) {
        segment1.selectedSegmentIndex = UISegmentedControlNoSegment
        segment2.selectedSegmentIndex = UISegmentedControlNoSegment
        let valueINeed = segmentvalue[segment3.selectedSegmentIndex + 4]
    }
    

    详细信息here: multi row segemented control in swift

    【讨论】:

    • 请在您的回复中的链接中发布代码,而不仅仅是作为链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    相关资源
    最近更新 更多