实际上标题包含了我的问题。 我有一个 UISegmentedControl,并且需要取消当前选定的标签。 我尝试过:
[menu setSelectedSegmentIndex:-1];
我将menu作为uisegmentedcontrol的UBOutlet,但是这给了我一个异常。有人有什么想法吗?谢谢。Peter
实际上标题包含了我的问题。 我有一个 UISegmentedControl,并且需要取消当前选定的标签。 我尝试过:
[menu setSelectedSegmentIndex:-1];
我将menu作为uisegmentedcontrol的UBOutlet,但是这给了我一个异常。有人有什么想法吗?谢谢。Peter
正确的方法是:
[menu setSelectedSegmentIndex:UISegmentedControlNoSegment];
编辑:
Swift 5:
menu.selectedSegmentIndex = UISegmentedControl.noSegment
将 segmentedControl 的 .momentary = YES
设置会改变用户与 segmentedControl 交互的方式。如果您希望在页面加载时初始状态下没有选择任何内容,但在用户进行选择后,segmentedControl 表现出相同的行为,则需要类似以下设置:
Swift 4 解决方案:
@IBOutlet weak var segmentedControl: UISegmentedControl!
self.segmentedControl.selectedSegmentIndex = UISegmentedControlNoSegment
Swift 5.1:
self.segmentedControl.selectedSegmentIndex = UISegmentedControl.noSegment
我猜你想在分段控制器中创建一个短暂的选择。
在界面构建器中将分段控制器设置为短暂模式,或者在代码中可以这样做:
menu.momentary = YES;
我做了一个支持这种交互的类:
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)
}
}
}
}
swift 4
@IBOutlet weak var segmentControl: UISegmentedControl! {
didSet {
segmentControl.selectedSegmentIndex = UISegmentedControl.noSegment
}
}
@IBOutlet weak var mySegmentedControl: UISegmentedControl!
和 mySegmentedControl.selectedSegmentIndex = -1
。[myArray length]
而不是正确的[myArray count]
。NSArray使用count方法而不是length来获取其包含的项目数量。