有没有办法检测对 UISegmentedControl 中的段的第二次点击?我发现:
然而,据称:
如果您将分段控件设置为具有瞬时样式,则当用户触摸它时,该分段不会显示为选中状态(蓝色背景)。披露按钮始终是瞬时的,不影响实际选择。
有没有办法检测第二次点击以及触发选择操作并将段显示为选中?
如果没有直接的方法来做到这一点,我在想的是,我首先将momentary
标志设置为YES
,然后在每次单击时手动更新选择状态,但随后我还需要更新/取消选择其他段。
谢谢
有没有办法检测对 UISegmentedControl 中的段的第二次点击?我发现:
然而,据称:
如果您将分段控件设置为具有瞬时样式,则当用户触摸它时,该分段不会显示为选中状态(蓝色背景)。披露按钮始终是瞬时的,不影响实际选择。
有没有办法检测第二次点击以及触发选择操作并将段显示为选中?
如果没有直接的方法来做到这一点,我在想的是,我首先将momentary
标志设置为YES
,然后在每次单击时手动更新选择状态,但随后我还需要更新/取消选择其他段。
谢谢
解决方案是有一个 UISegmentedControl 的自定义子类并像这样自己检查它。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
current = self.selectedSegmentIndex;
[super touchesBegan:touches withEvent:event];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesEnded:touches withEvent:event];
if (current == self.selectedSegmentIndex)
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
我在 touchesBegan 中有一个其他解决方案,但它在 iOS 7 中不再有效。Stack Overflow 上还有其他解决方案在 iOS 6 及更高版本中无效。
使特定段再次可点击是不可能的,但您可以使用 UISegmentedControlNoSegment 重置整个段控制。
[self.segmentCtrlOutlet setSelectedSegmentIndex:UISegmentedControlNoSegment];
您需要做的就是将上面的代码放在当您单击 UISegmentedControl 的特定段时执行该代码的位置。
例如。在我的项目中,当我单击一个段时,UIPopoverController 打开并在其中我有 UIPicker,所以我在 UIPicker 委托方法“didSelectRow”中使用上面的代码