实际上标题包含我的问题。我有一个 UISegmentedControl,需要取消选择当前选定的选项卡。我试过:
[menu setSelectedSegmentIndex:-1];
menu 是 uisegmentedcontrol 的 UBOutlet ,但这给了我例外。有人有什么想法吗?谢谢彼得
实际上标题包含我的问题。我有一个 UISegmentedControl,需要取消选择当前选定的选项卡。我试过:
[menu setSelectedSegmentIndex:-1];
menu 是 uisegmentedcontrol 的 UBOutlet ,但这给了我例外。有人有什么想法吗?谢谢彼得
正确的做法是:
[menu setSelectedSegmentIndex:UISegmentedControlNoSegment];
编辑:
斯威夫特 5:
menu.selectedSegmentIndex = UISegmentedControl.noSegment
将segmentedControl 设置为.momentary = YES
更改用户与segmentedControl 交互的方式。如果您希望在页面加载时最初没有选择任何内容,但在用户做出选择后,segmentedControl 的行为相同,那么您将需要更多类似的东西:
斯威夫特 4 解决方案:
@IBOutlet weak var segmentedControl: UISegmentedControl!
self.segmentedControl.selectedSegmentIndex = UISegmentedControlNoSegment
斯威夫特 5.1:
self.segmentedControl.selectedSegmentIndex = UISegmentedControl.noSegment
我猜你试图在分段控制中创建一个瞬时选择。在界面生成器中,将分段控件设置为瞬时。或者在代码中你可以这样做:
menu.momentary = YES;
迅速 4
@IBOutlet weak var segmentControl: UISegmentedControl! {
didSet {
segmentControl.selectedSegmentIndex = UISegmentedControl.noSegment
}
}
我做了支持这种交互的课程:
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 正在使用的类,这将像一个魅力;]
您现在可以在界面构建器的 xcode 6 中执行此操作:
Deselect the 'Selected' option under segmented control behaviour in attributes inspector.
Swift 解决方案:@IBOutlet weak var mySegmentedControl: UISegmentedControl!
和mySegmentedControl.selectedSegmentIndex = -1
.
我会假设您在代码中的某个地方调用[myArray length]
了而不是正确的。[myArray count]
NSArray 使用 count 方法,而不是它包含的项目数的长度。