UISegmentedControl取消选择(不选择任何段)

dus*_*ker 42 iphone xcode uisegmentedcontrol iboutlet

实际上标题包含我的问题.我有一个UISegmentedControl,需要取消选择当前选中的选项卡.我试过了:

[menu setSelectedSegmentIndex:-1];
Run Code Online (Sandbox Code Playgroud)

菜单是Uisegmentedcontrol的UBOutlet,但这给了我一个例外.谁有想法?谢谢皮特

Cal*_*ule 235

正确的方法是:

[menu setSelectedSegmentIndex:UISegmentedControlNoSegment];
Run Code Online (Sandbox Code Playgroud)

  • 我不明白为什么OP不选择这个答案! (10认同)

dom*_*esz 31

我猜你试图在分段控制中创建一个瞬时选择.在界面构建器中,将分段控件设置为瞬时.或者在代码中你可以做:

menu.momentary = YES;
Run Code Online (Sandbox Code Playgroud)


Dan*_*ard 27

设置segmentedControl以.momentary = YES更改用户与segmentedControl交互的方式.如果你想在页面加载时没有选择任何内容,但是在用户做出选择之后segmentedControl的行为相同,那么你会想要更像这样的东西:

Swift 4解决方案:

 @IBOutlet weak var segmentedControl: UISegmentedControl!

 self.segmentedControl.selectedSegmentIndex = UISegmentedControlNoSegment
Run Code Online (Sandbox Code Playgroud)


Rod*_*ici 8

我做了支持这种交互的课程:

class UIDeselectableSegmentedControl: UISegmentedControl {

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        let previousSelectedSegmentIndex = self.selectedSegmentIndex

        super.touchesEnded(touches, with: event)

        if previousSelectedSegmentIndex == self.selectedSegmentIndex {

            self.selectedSegmentIndex = UISegmentedControl.noSegment
            let touch = touches.first!
            let touchLocation = touch.location(in: self)
            if bounds.contains(touchLocation) {
                self.sendActions(for: .valueChanged)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做的主要优点是,您只需要修改 Storyboard/Xib/ViewCode 正在使用的类,这将像魅力一样工作;]


Исм*_*тов 7

迅捷 4

@IBOutlet weak var segmentControl: UISegmentedControl! {
    didSet {
        segmentControl.selectedSegmentIndex = UISegmentedControl.noSegment
    }
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*rek -1

我假设您已调用[myArray length]而不是[myArray count]代码中正确的位置。NSArray 使用 count 方法,而不是它包含的项目数的 length 方法。

  • 为什么投反对票?我的答案是真正解决黄昏所遇到的问题的唯一答案。 (4认同)
  • 嗨,我不明白。这与 uisegmentedcontrol 有什么关系 (3认同)
  • OP问了错误的问题(可以通过异常清楚地看到),这是正确的答案。它100%解决了这个问题。 (2认同)
  • 这并没有回答如何根本不选择任何选项的问题...下面的快速选项显示为可接受的答案。 (2认同)