10

有没有办法检测对 UISegmentedControl 中的段的第二次点击?我发现:

检测对段的第二次点击

然而,据称:

如果您将分段控件设置为具有瞬时样式,则当用户触摸它时,该分段不会显示为选中状态(蓝色背景)。披露按钮始终是瞬时的,不影响实际选择。

有没有办法检测第二次点击以及触发选择操作并将段显示为选中?

如果没有直接的方法来做到这一点,我在想的是,我首先将momentary标志设置为YES,然后在每次单击时手动更新选择状态,但随后我还需要更新/取消选择其他段。

谢谢

4

2 回答 2

16

解决方案是有一个 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 及更高版本中无效。

于 2013-11-12T01:23:52.040 回答
1

使特定段再次可点击是不可能的,但您可以使用 UISegmentedControlNoSegment 重置整个段控制。

[self.segmentCtrlOutlet setSelectedSegmentIndex:UISegmentedControlNoSegment];

您需要做的就是将上面的代码放在当您单击 UISegmentedControl 的特定段时执行该代码的位置。

例如。在我的项目中,当我单击一个段时,UIPopoverController 打开并在其中我有 UIPicker,所以我在 UIPicker 委托方法“didSelectRow”中使用上面的代码

于 2016-04-26T15:00:29.660 回答