实际上标题包含我的问题。 我有一个UISegmentedControl,需要取消选择当前选中的选项卡。 我试过了:
[menu setSelectedSegmentIndex:-1];
菜单是uisegmentedcontrol的UBOutlet,但这给了我一个例外。 谁有想法? 谢谢 彼得
答案 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使用的类,就可以像超级按钮一样工作;]