处理同一个分段按钮?

Tru*_*an1 -1 uisegmentedcontrol iboutlet ios ios8

我正在尝试在分段控件上处理点击事件,但是再次单击所选按钮时.例如,对于下面已选择"秒"的屏幕截图,如何再次单击"第二个"按钮时如何处理操作?

我试过了IBOutlet,但它只在值发生变化时触发.然后我尝试了下面的代码,但是只有在值发生变化时它才触发.在两种情况下,选择"秒"时,再次单击"秒"不会触发任何内容.有没有办法做到这一点?

segmentedControl.addTarget(self, action: "segementedAnyTap:", forControlEvents: .AllEvents)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

小智 6

这适用于我,为UISegmentedControl添加手势识别器

- (void)viewDidLoad
{
  [super viewDidLoad];

  [self.segmentedControl addTarget:self action:@selector(valueChanged:) forControlEvents:UIControlEventValueChanged];
  UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(touched:)];
  [self.segmentedControl addGestureRecognizer:tapGesture];
}

- (void)valueChanged:(id)sender
{
  // value change code
}

- (void)touched:(id)sender
{
  // code to check if the segmented controls index has not changed.
  // execute desired functionality
}
Run Code Online (Sandbox Code Playgroud)

  • 这确实很快,但我的`@ IBAction`分段控制停止了工作. (2认同)
  • 这将停止触发值更改事件。 (2认同)

Tho*_*ard 5

很好的答案@Sgorbyo,这是它的 Swift 3 版本:

override func viewDidLoad() {
    super.viewDidLoad()
    let segmentedTapGesture = UITapGestureRecognizer(target: self, action: #selector(onTapGestureSegment(_:)))
    segmentedControl.addGestureRecognizer(segmentedTapGesture)
}

@IBAction func onTapGestureSegment(_ tapGesture: UITapGestureRecognizer) {
    let point = tapGesture.location(in: segmentedControl)
    let segmentSize = tipSegmentedControl.bounds.size.width / CGFloat(segmentedControl.numberOfSegments)
    let touchedSegment = Int(point.x / segmentSize)

    if segmentedControl.selectedSegmentIndex != touchedSegment {
        // Normal behaviour the segment changes
        segmentedControl.selectedSegmentIndex = touchedSegment
    } else {
        // Tap on the already selected segment
        segmentedControl.selectedSegmentIndex = touchedSegment
    }
    onSegment(segmentedControl)
}

@IBAction func onSegment(_ sender: Any) {
// Your segment changed selector
}
Run Code Online (Sandbox Code Playgroud)