War*_*ior 62 cocoa-touch uisegmentedcontrol ios
我UISegmentedControl在我的申请中添加了一个.在正常状态下没有选择任何按钮.我想在选择第一个段时实现按钮单击事件,而在单击另一个按钮时实现另一个事件.
mac*_*die 129
如果我正确理解你的问题,你只需要为常量实现一个目标动作方法(由UIControl哪个是UISegmentedControl父类支持)UIControlEventValueChanged,就像在UISegmentControl的参考文档中给出的例子一样.
即
[segmentedControl addTarget:self
action:@selector(action:)
forControlEvents:UIControlEventValueChanged];
Run Code Online (Sandbox Code Playgroud)
用于具有以下签名的邮件:
- (void)action:(id)sender
Run Code Online (Sandbox Code Playgroud)
要么
[segmentedControl addTarget:self
action:@selector(action:forEvent:)
forControlEvents:UIControlEventValueChanged];
Run Code Online (Sandbox Code Playgroud)
对于
- (void)action:(id)sender forEvent:(UIEvent *)event
Run Code Online (Sandbox Code Playgroud)
要么
[segmentedControl addTarget:self
action:@selector(action)
forControlEvents:UIControlEventValueChanged];
Run Code Online (Sandbox Code Playgroud)
对于最简单的方法:
- (void)action
Run Code Online (Sandbox Code Playgroud)
这是UIKit中使用的标准类型的目标动作选择器.
Nun*_*rro 65
试试这个:
- (IBAction)segmentSwitch:(UISegmentedControl *)sender {
NSInteger selectedSegment = sender.selectedSegmentIndex;
if (selectedSegment == 0) {
}
else{
}
}
Run Code Online (Sandbox Code Playgroud)
试试这个,
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];
Run Code Online (Sandbox Code Playgroud)
然后写一个动作,
if (travelModeSegment.selectedSegmentIndex == 0) {
//write here your action when first item selected
} else {
//write here your action when second item selected
}
Run Code Online (Sandbox Code Playgroud)
我希望它会对你有所帮助
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
}
Run Code Online (Sandbox Code Playgroud)
值得注意的是,选择器必须完全匹配方法,但没有实际参数.
@selector(action)
=> -(void) action { ..code.. }
@selector(action:)
=> -(void) action:(id)sender { ..code.. }
@selector(action:forEvent:)
=> -(void) action:(id)sender forEvent:(UIEvent *)event { ..code.. }
Run Code Online (Sandbox Code Playgroud)
这使我困惑的时间最长,而且从早期的答案来看并不十分清楚.
对于SWIFT使用此:
segmentedControl.addTarget( self, action: "segmentSelected:", forControlEvents: UIControlEvents.ValueChanged )
Run Code Online (Sandbox Code Playgroud)
并实现这样的方法:
func segmentSelected(sender: UISegmentedControl)
{
println("selected index: \(sender.selectedSegmentIndex)")
}
Run Code Online (Sandbox Code Playgroud)
如果要在选择所选段时调用特定操作,请扩展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
}
}
Run Code Online (Sandbox Code Playgroud)
并在"segmentSelected"中调用您的"valueChanged",如下所示:
func segmentSelected(sender: CustomSegmentedControl)
{
println("selected index: \(sender.selectedSegmentIndex)")
sender.valueChanged(sender.selectedSegmentIndex)
}
Run Code Online (Sandbox Code Playgroud)