Я добавил UISegmentedControl
в мое приложение. Ни одна из кнопок не выбрана в нормальном состоянии. Я хочу реализовать событие нажатия кнопки, когда выбран первый сегмент, и другое событие, когда нажата другая кнопка.
Определить событие click для UISegmentedControl
Ответ 1
Если я правильно понимаю ваш вопрос, вам просто нужно реализовать метод целевого действия (поддерживается UIControl
, который равен UISegmentedControl
родительский класс) для константы UIControlEventValueChanged
, точно так же, как в примере, приведенном в 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.
Ответ 2
попробуйте следующее:
- (IBAction)segmentSwitch:(UISegmentedControl *)sender {
NSInteger selectedSegment = sender.selectedSegmentIndex;
if (selectedSegment == 0) {
}
else{
}
}
Ответ 3
Попробуйте это,
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
}
Я надеюсь, что это поможет вам
Ответ 4
Стоит отметить, что селектор должен точно соответствовать методу, но без фактических параметров.
@selector(action)
=> -(void) action { ..code.. }
@selector(action:)
=> -(void) action:(id)sender { ..code.. }
@selector(action:forEvent:)
=> -(void) action:(id)sender forEvent:(UIEvent *)event { ..code.. }
Это смутило меня в течение самого долгого времени, и это не совсем ясно из более ранних ответов.
Ответ 5
для 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
}
}
и вызовите "valueChanged" в "segmentSelected" следующим образом:
func segmentSelected(sender: CustomSegmentedControl)
{
println("selected index: \(sender.selectedSegmentIndex)")
sender.valueChanged(sender.selectedSegmentIndex)
}
Ответ 6
Простым образом, вам нужно сделать действие, используя раскадровку, в контроллер вида, чтобы это действие работало.
- (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;
}
}
Ответ 7
Простая версия с быстрым обновлением
func loadControl(){
self.yourSegmentedControl.addTarget(self, action: #selector(segmentSelected(sender:)), forControlEvents: .valueChanged)
}
func segmentSelected(sender: UISegmentedControl)
{
let index = sender.selectedSegmentIndex
// Do what you want
}
Ответ 8
Вы можете присоединить обработчик в IB к событию с измененным значением: UIControlEventValueChanged
или вы можете сделать это в коде:
[segmentedControl addTarget:self
action:@selector(action:)
forControlEvents:UIControlEventValueChanged];