2015-10-23 41 views
0

我有一个分段控制,5段..我想要一些事件被触发时触发发生在任何部分,我的意思是点击并按住,没有举起手指。 当用户抬起手指,它应该重置有什么办法我可以注册触摸下来UISegmentedControl

我一直在使用的touchesBegan和touchesEnded试过,但我不得到的touchesBegan当前的selectedIndex,这里是我的代码

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

    long oldValue = self.selectedSegmentIndex; 
    [super touchesBegan:touches withEvent:event]; 
    if (oldValue == self.selectedSegmentIndex) 
     [self sendActionsForControlEvents:UIControlEventValueChanged]; 
} 

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"touchesEnded"); 
    NSLog(@"selectedIndex%lu",self.selectedSegmentIndex); 
    [super touchesEnded:touches withEvent:event]; 
    self.selectedSegmentIndex = -1; 
} 

有什么办法为segmentedControl或其他选择实现触摸事件效果?

+0

触动开始,细分还没有被选中,所以你不能得到它。 – kientux

+0

@ kientux有没有什么办法可以在选择索引之前?我想要触发事件时触发 – vin

+0

我认为只用UISegmentedControl时,触发事件无能为力,因为只有触摸时才选择段。如果你真的想这样做,你可以在每个片段上放置一个透明的按钮,当按钮被触及时,调用'setSelectedSegmentIndex:'。然后你有两个触摸事件和选定的索引。 – kientux

回答

0

您可以使用touchDown:IBAction选择器。

+0

它不工作,我已经尝试过,UISegmentedControl只适用于valueChanged选择器 – vin

+0

检查此线程 - http://stackoverflow.com/questions/1620972/uisegmentedcontrol-register-taps-on-selected-segment – nanjunda

0

你可以试着重写:

- (void) setSelectedSegmentIndex:(NSInteger)toValue 
0

坦率地说,我不认为这是可能的UISegmentedControl做。在调用touchesEnded:withEvent:之前,您不会获得选定的段索引。

如果你想得到touchesBegan:withEvent:,我的建议是写你自己的自定义视图,看起来像UISegmentedControl,并给你回电touchesBegan:withEvent:

正如上面的kientux建议的那样,在UISegmentedControl的每个段的顶部添加透明视图或按钮可能是解决您的问题的另一种方法,但这将非常棘手!

祝你好运!

相关问题