我在我的应用程序中添加了一个UISegmentedControl
。在普通状态下,没有任何按钮被选中。我想在第一个段被选择时实现一个按钮点击事件,并在其他按钮被点击时实现另一个事件。
我在我的应用程序中添加了一个UISegmentedControl
。在普通状态下,没有任何按钮被选中。我想在第一个段被选择时实现一个按钮点击事件,并在其他按钮被点击时实现另一个事件。
UIControl
支持,它是UISegmentedControl
的父类)来处理常量UIControlEventValueChanged
,就像在UISegmentControl的reference documentation中给出的示例一样。[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
试试这个:
- (IBAction)segmentSwitch:(UISegmentedControl *)sender {
NSInteger selectedSegment = sender.selectedSegmentIndex;
if (selectedSegment == 0) {
}
else{
}
}
更新了 Swift 的简化版本
func loadControl(){
self.yourSegmentedControl.addTarget(self, action: #selector(segmentSelected(sender:)), forControlEvents: .valueChanged)
}
func segmentSelected(sender: UISegmentedControl)
{
let index = sender.selectedSegmentIndex
// Do what you want
}
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
}
我希望它能对你有所帮助
@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)")
}
如果您想在选择特定段时调用特定操作,请扩展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
}
}
请注意,不要删除html标签。
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];