Подтвердить что ты не робот

Определить событие click для UISegmentedControl

Я добавил UISegmentedControl в мое приложение. Ни одна из кнопок не выбрана в нормальном состоянии. Я хочу реализовать событие нажатия кнопки, когда выбран первый сегмент, и другое событие, когда нажата другая кнопка.

4b9b3361

Ответ 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];