UISegmentedControl register taps on selected segment

后端 未结 20 3076
渐次进展
渐次进展 2020-12-04 15:28

I have a segmented control where the user can select how to order a list. Works fine.

However, I would like that when an already selected segment is tapped, the orde

20条回答
  •  孤城傲影
    2020-12-04 15:54

    The selected answer's solution did not work for me as of current iOS v8.x. But @Andy offer a solution and I will complete:

    Subclass the UISegmentedControl, and overwrite touchesEnded method in the subclass:

    -(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
    {
        [self sendActionsForControlEvents:UIControlEventAllTouchEvents];
        [super touchesEnded:touches withEvent:event];
    }
    

    In the class where you intend to use the UISegmentedControl, create an iVar currentSelectedSegIndex. Add the UIControlEventAllTouchEvents beside your UIControlEventValueChanged action methods:

    NSInteger currentSelectedSegIndex;
    
    [aSegmentedController addTarget:self action:@selector(aSegmentedControllerSelection:) forControlEvents:UIControlEventValueChanged];
    [aSegmentedController addTarget:self action:@selector(aSegmentedControllerAllTouchEvent:) forControlEvents:UIControlEventAllTouchEvents];
    

    Implement the two action methods:

    -(void)aSegmentedControllerAllTouchEvent:(MyUISegmentedControl *)seg
    {
        seg.selectedSegmentIndex = UISegmentedControlNoSegment;
    }
    -(void)aSegmentedControllerSelection:(MyUISegmentedControl *)seg
    {
        if (currentSelectedSegIndex == seg.selectedSegmentIndex)
        {
            seg.selectedSegmentIndex = UISegmentedControlNoSegment;
            currentSelectedSegIndex = NSIntegerMax;
            NSLog(@"%s Deselected.", __PRETTY_FUNCTION__);
            // do your stuff if deselected
            return;
        }
        NSLog(@"%s Selected index:%u", __PRETTY_FUNCTION__, seg.selectedSegmentIndex);
        currentSelectedSegIndex = seg.selectedSegmentIndex;
        //do your stuff if selected index
    }
    

提交回复
热议问题