我UISegmentedControl
在我的应用程序中添加了一个。在正常状态下没有选择任何按钮。我想在选择第一个段时实现一个按钮单击事件,并在单击另一个按钮时实现另一个事件。
问问题
77126 次
8 回答
133
如果我正确理解您的问题,您只需为常量实现一个目标操作方法(由UIControl
它UISegmentedControl
的父类支持)UIControlEventValueChanged
,就像 UISegmentControl 的参考文档中给出的示例一样。
IE
[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 中使用的标准类型的目标动作选择器。
于 2010-06-15T21:47:11.127 回答
69
尝试这个:
- (IBAction)segmentSwitch:(UISegmentedControl *)sender {
NSInteger selectedSegment = sender.selectedSegmentIndex;
if (selectedSegment == 0) {
}
else{
}
}
于 2013-01-02T15:40:35.190 回答
12
快速更新的简单版本
func loadControl(){
self.yourSegmentedControl.addTarget(self, action: #selector(segmentSelected(sender:)), forControlEvents: .valueChanged)
}
func segmentSelected(sender: UISegmentedControl)
{
let index = sender.selectedSegmentIndex
// Do what you want
}
于 2016-06-09T15:05:12.433 回答
9
试试这个,
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
}
我希望它会帮助你
于 2010-06-15T22:13:33.437 回答
7
值得注意的是,选择器必须与方法完全匹配,但没有实际参数。
@selector(action)
=> -(void) action { ..code.. }
@selector(action:)
=> -(void) action:(id)sender { ..code.. }
@selector(action:forEvent:)
=> -(void) action:(id)sender forEvent:(UIEvent *)event { ..code.. }
这让我困惑了很长时间,而且从早期的答案中也不是很清楚。
于 2012-10-08T21:28:30.193 回答
6
对于 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
}
}
并像这样在“segmentSelected”中调用您的“valueChanged”:
func segmentSelected(sender: CustomSegmentedControl)
{
println("selected index: \(sender.selectedSegmentIndex)")
sender.valueChanged(sender.selectedSegmentIndex)
}
于 2015-03-03T19:05:26.663 回答
4
像这样简单,您需要使用情节提要对视图控制器进行操作,以使该操作起作用。
- (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;
}
}
于 2014-06-03T22:46:44.403 回答
2
您可以将 IB 中的处理程序附加到值更改事件: UIControlEventValueChanged
或者您可以在代码中执行此操作:
[segmentedControl addTarget:self
action:@selector(action:)
forControlEvents:UIControlEventValueChanged];
于 2010-06-15T21:45:00.223 回答