UISegmentedControl:如何检测当前段的点击?

时间:2013-11-12 01:11:17

标签: ios objective-c uisegmentedcontrol

有没有办法检测UISegmentedControl中段的第二次点击?我找到了:

Detect second click on a segment

然而,据说:

  

如果将分段控件设置为具有瞬时样式,则当用户触摸时,段不会将其自身显示为选中(蓝色背景)。公开按钮始终是瞬间的,不会影响实际选择。

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

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

由于

2 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:0)

要使特定段再次无法点击,但您可以使用UISegmentedControlNoSegment重置整个segmentControl。

[self.segmentCtrlOutlet setSelectedSegmentIndex:UISegmentedControlNoSegment];

当你点击UISegmentedControl的特定片段时,你需要做的就是将上面的代码放在代码执行的地方。

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