【问题标题】:How do I switch UISegmentedControl programmatically?如何以编程方式切换 UISegmentedControl?
【发布时间】:2011-07-13 12:37:40
【问题描述】:

如何以编程方式切换UISegmentedControl

【问题讨论】:

    标签: ios iphone uisegmentedcontrol


    【解决方案1】:

    selectedSegmentIndex 属性标识 UISegmentedControl 的选定段。将此属性设置为任何有效的段索引,或UISegmentedControlNoSegment (-1) 以关闭当前选择。

    // select the first segment
    segmented.selectedSegmentIndex = 0;
    
    // turn off the current selection
    segmented.selectedSegmentIndex = UISegmentedControlNoSegment;
    

    【讨论】:

    • 不过,当用户选择不同的细分时,这实际上不会触发您设置的任何目标/操作。
    • @jmstone617 我不希望这样,就像使用 UISwitch - 至少在我的经验中,设置它的值,比如说,用户默认值不会自动调用任何函数,如果用户手动更改其状态。
    • 触发之后要编写的动作:segmentedControl.sendActions(for: .valueChanged)
    【解决方案2】:

    或者,在您更改 selectedSegmentIndex 之后,例如调用“sendActionsForControlEvents:”

    segmentedControl.selectedSegmentIndex = 0
    
    [segmentedControl sendActionsForControlEvents:UIControlEventValueChanged];
    

    【讨论】:

    • 如果没有sendActionsForControlEvents,它只会更改段,但不会触发事件。在 Swift 中是 segmentedControl.sendActionsForControlEvents(UIControlEvents.ValueChanged) 非常感谢。
    • 工作良好但旧的索引颜色没有改变
    【解决方案3】:

    在斯威夫特中:

    segmentedControl.selectedSegmentIndex = 1
    

    斯威夫特 2:

    segmentedControl.sendActionsForControlEvents(UIControlEvents.ValueChanged)
    

    斯威夫特 3:

    segmentedControl.sendActions(for: UIControlEvents.valueChanged)
    

    【讨论】:

      【解决方案4】:

      @jmstone 响应, true,此操作不会为此控件调用 valueChanged 事件。

      解决这个问题的一种方法是自己调用函数:

      segmentedControl.selectedSegmentIndex = 3;
      [self valueChangedMethod:segmentedControl];
      

      这将调用:

      - (void)valueChangedMethod:(UISegmentedControl *)segmentedControl
      {
          //continue your code here...
      }
      

      【讨论】:

        【解决方案5】:

        编辑: Yogesh Nikam Patil 让我注意到,UIControlEvents 已从 UIControlEvents 重命名为 UIControl.Event。我已经相应地更新了我的代码。

        @arcady bob 的回答是为我解决问题的答案。

        我刚刚发布了 SWIFT 5 的更新版本:

        yourSegmentedControl.selectedSegmentIndex = 0
        yourSegmentedControl.sendActions(for: UIControl.Event.valueChanged)
        

        如果您只使用第一行,分段控件将以图形方式做出相应反应,但不会调用与分段控件关联的 IBAction。简而言之:第二行就像点击分段控件。 这是我需要的,也是我缺少的。

        【讨论】:

        • 'UIControlEvents' 已重命名为 'UIControl.Event'
        【解决方案6】:

        我遇到了类似的问题,即分段控件没有改变。 我过早地调用“selectedSegmentIndex”等。一旦我在调用“viewDidLoad”之后调用它,那么一切都很好了。

        【讨论】:

          【解决方案7】:

          首先,从您从 UI 添加的分段控件创建一个插座

          @IBOutlet 弱变量 segmentedControl:UISegmentedControl! 使用下面的代码以编程方式更改选定的段

          segmentedControl.selectedSegmentIndex = 1 // 索引

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-06-20
            • 2012-04-06
            • 1970-01-01
            • 2019-07-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多