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

时间:2010-02-05 09:08:27

标签: iphone xcode uisegmentedcontrol iboutlet

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

[menu setSelectedSegmentIndex:-1];

菜单是uisegmentedcontrol的UBOutlet,但这给了我一个例外。 谁有想法? 谢谢 彼得

8 个答案:

答案 0 :(得分:228)

正确的方法是:

[menu setSelectedSegmentIndex:UISegmentedControlNoSegment];

答案 1 :(得分:31)

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

menu.momentary = YES;

答案 2 :(得分:25)

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

Swift 4解决方案

.momentary = YES

答案 3 :(得分:3)

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

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

我认为您已在代码中的某处调用了[myArray length]而不是正确的[myArray count]。 NSArray使用count方法,而不是它包含的项目数的长度。

答案 6 :(得分:1)

迅速4

@IBOutlet weak var segmentControl: UISegmentedControl! {
    didSet {
        segmentControl.selectedSegmentIndex = UISegmentedControl.noSegment
    }
}

答案 7 :(得分:0)

我上过支持这种互动的课程:

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使用的类,就可以像超级按钮一样工作;]