定义UISegmentedControl的点击事件

我在我的应用程序中添加了一个UISegmentedControl 。 在正常状态下,没有select任何button。 我想实现一个button点击事件,当第一个段被选中,另一个事件时,另一个button被点击。

如果我正确理解你的问题,你只需要实现UIControl常量的UIControlEventValueChanged目标方法(由UISegmentedControl的父类UIControl支持),就像在UISegmentControl的参考文档中给出的例子一样。

 [segmentedControl addTarget:self action:@selector(action:) forControlEvents:UIControlEventValueChanged]; 

用于具有以下签名的消息:

 - (void)action:(id)sender 

要么

 [segmentedControl addTarget:self action:@selector(action:forEvent:) forControlEvents:UIControlEventValueChanged]; 

对于

 - (void)action:(id)sender forEvent:(UIEvent *)event 

要么

 [segmentedControl addTarget:self action:@selector(action) forControlEvents:UIControlEventValueChanged]; 

最简单的方法:

 - (void)action 

这是UIKit中使用的标准types的目标动作select器。

尝试这个:

 - (IBAction)segmentSwitch:(UISegmentedControl *)sender { NSInteger selectedSegment = sender.selectedSegmentIndex; if (selectedSegment == 0) { } else{ } } 

试试这个,

  UISegmentedControl * travelModeSegment = [[UISegmentedControl alloc] initWithItems: [NSArray arrayWithObjects:NSLocalizedString(@"Driving", nil), NSLocalizedString(@"Walking", nil), nil]]; [travelModeSegment setFrame:CGRectMake(9.0f, 0.0f, 302.0f, 45.0f)]; [cell addSubview:travelModeSegment]; [travelModeSegment release]; 

然后写一个动作,

  if (travelModeSegment.selectedSegmentIndex == 0) { //write here your action when first item selected } else { //write here your action when second item selected } 

我希望这会帮助你

值得注意的是,select器必须完全匹配一个方法,但没有实际的参数。

 @selector(action) => -(void) action { ..code.. } @selector(action:) => -(void) action:(id)sender { ..code.. } @selector(action:forEvent:) => -(void) action:(id)sender forEvent:(UIEvent *)event { ..code.. } 

这让我困惑了很长时间,从以前的答案中不太清楚。

对于SWIFT使用这个:

 segmentedControl.addTarget( self, action: "segmentSelected:", forControlEvents: UIControlEvents.ValueChanged ) 

并实现一个像这样的方法:

 func segmentSelected(sender: UISegmentedControl) { println("selected index: \(sender.selectedSegmentIndex)") } 

如果要在select选定的段时调用特定操作,请扩展UISegmentedControl:

 class CustomSegmentedControl : UISegmentedControl { override init() { super.init() } override init(frame:CGRect) { super.init(frame:frame) } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } func valueChanged(index:Int) { // ACTION GOES HERE } } 

并在“segmentSelected”中调用您的“valueChanged”,如下所示:

 func segmentSelected(sender: CustomSegmentedControl) { println("selected index: \(sender.selectedSegmentIndex)") sender.valueChanged(sender.selectedSegmentIndex) } 

这样简单,你需要使用故事板的视图控制器的行动,以使这个行动工作。

 - (IBAction)searchSegmentedControl:(UISegmentedControl *)sender { switch (sender.selectedSegmentIndex) { case 0: NSLog(@"First was selected"); break; case 1: NSLog(@"Second was selected"); break; case 2: NSLog(@"Third was selected"); break; default: break; } } 

您可以将IB中的处理程序附加到值已更改的事件:UIControlEventValueChanged

或者你可以在代码中做到这一点:

 [segmentedControl addTarget:self action:@selector(action:) forControlEvents:UIControlEventValueChanged]; 

简单的版本在迅速更新

 func loadControl(){ self.yourSegmentedControl.addTarget(self, action: #selector(segmentSelected(sender:)), forControlEvents: .valueChanged) } func segmentSelected(sender: UISegmentedControl) { let index = sender.selectedSegmentIndex // Do what you want }