51

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

[menu setSelectedSegmentIndex:-1];

menu 是 uisegmentedcontrol 的 UBOutlet ,但这给了我例外。有人有什么想法吗?谢谢彼得

4

8 回答 8

250

正确的做法是:

[menu setSelectedSegmentIndex:UISegmentedControlNoSegment];

编辑:

斯威夫特 5

menu.selectedSegmentIndex = UISegmentedControl.noSegment
于 2012-02-06T18:11:18.933 回答
32

将segmentedControl 设置为.momentary = YES更改用户与segmentedControl 交互的方式。如果您希望在页面加载时最初没有选择任何内容,但在用户做出选择后,segmentedControl 的行为相同,那么您将需要更多类似的东西:

斯威夫特 4 解决方案

 @IBOutlet weak var segmentedControl: UISegmentedControl!

 self.segmentedControl.selectedSegmentIndex = UISegmentedControlNoSegment

斯威夫特 5.1

 self.segmentedControl.selectedSegmentIndex = UISegmentedControl.noSegment
于 2016-03-15T16:34:36.497 回答
31

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

menu.momentary = YES;
于 2011-05-19T18:00:42.423 回答
7

迅速 4

@IBOutlet weak var segmentControl: UISegmentedControl! {
    didSet {
        segmentControl.selectedSegmentIndex = UISegmentedControl.noSegment
    }
}
于 2018-12-20T06:33:24.610 回答
4

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

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

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

于 2019-11-22T20:42:07.993 回答
3

您现在可以在界面构建器的 xcode 6 中执行此操作:

Deselect the 'Selected' option under segmented control behaviour in attributes inspector.

于 2014-10-11T09:21:38.980 回答
2

Swift 解决方案:@IBOutlet weak var mySegmentedControl: UISegmentedControl!mySegmentedControl.selectedSegmentIndex = -1.

于 2015-11-20T03:47:12.977 回答
0

我会假设您在代码中的某个地方调用[myArray length]了而不是正确的。[myArray count]NSArray 使用 count 方法,而不是它包含的项目数的长度。

于 2010-02-05T17:29:40.000 回答