定义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 }