Вызов действия кнопок в сегментном управлении - PullRequest
0 голосов
/ 10 июня 2019

У меня есть метод сегментированного действия управления с двумя сегментами

@IBAction func segmentChanged(_ sender: UISegmentedControl) { 

    // What goes here for displaying data similar to buttonsTapped? 
}

У меня есть три кнопки следующим образом

 @IBOutlet weak var buttonOne: UIButton!
 @IBOutlet weak var buttonTwo: UIButton!
 @IBOutlet weak var buttonThree: UIButton!

У меня есть метод действия для всех 3 кнопок,

 @IBAction func buttonsTapped(_ sender: UIButton) { 

    switch sender {
    case buttonOne:
     print("Button one Tapped")
    case buttonTwo:
     print("Button two tapped")
    case buttonThree:
     print("Button three tapped")
    default: break
    }

  if segmentedControl.selectedSegmentIndex == 0
        {
            print("First Segment")
        }
        else
        {
            print("Second Segment")
        }
  }

Когда я нажимаю на кнопку «Один», я получаю "First Segment" и "Button One Tapped", как в первом сегменте.Аналогично, buttonTwo и buttonThree отображают правильные сообщения на консоли.

Но когда я меняю сегментированный элемент управления, я не получаю никаких сообщений на консоли.Я попытался вызвать buttonOne.sendActions(for: .touchUpInside) в segmentChanged методе, и он работает только для buttonOne и портит других.Как получить правильные сообщения для всех кнопок и сегментов при изменении сегмента?Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 10 июня 2019

Вам необходимо установить UISegmentedControl метод для .valueChange, а не для .touchUpInside.

выглядит следующим образом:

UISegmentedControl

и добавить следующий метод.

Код:

@IBOutlet weak var buttonOne            : UIButton!
@IBOutlet weak var buttonTwo            : UIButton!
@IBOutlet weak var buttonThree          : UIButton!
@IBOutlet weak var segmentedControl     : UISegmentedControl!

var selectedButton                      : UIButton!

@IBAction func buttonsTapped(_ sender: UIButton) {

    selectedButton = sender

    switch sender {

    case buttonOne:
        print("Button one Tapped")

    case buttonTwo:
        print("Button two tapped")

    case buttonThree:
        print("Button three tapped")

    default: break
    }

    if self.segmentedControl.selectedSegmentIndex == 0 {
        print("First Segment")
    } else {
        print("Second Segment")
    }
}


@IBAction func segmentChanged(_ sender: UISegmentedControl) {
    if sender.selectedSegmentIndex == 0
    {
        self.selectedButton.sendActions(for: .touchUpInside)
    }
    else
    {
        self.selectedButton.sendActions(for: .touchUpInside)
    }
}
1 голос
/ 10 июня 2019

Изменение контрольного значения сегмента будет регистрироваться с использованием описанного ниже метода

   @IBAction func segmentChanged(_ sender: UISegmentedControl) { 
    if sender.selectedSegmentIndex == 0
            {
                print("First Segment")
            }
            else
            {
                print("Second Segment")
            }
    }

И действие кнопки будет зарегистрировано с использованием метода ниже:

@IBAction func buttonsTapped(_ sender: UIButton) { 

    switch sender {

    case buttonOne:
     print("Button one Tapped")
    case buttonTwo:
     print("Button two tapped")
    case buttonThree:
     print("Button three tapped")
    default: break
    }
}

Оба метода нельзя комбинировать, поскольку кнопка, связанная с внутренним событием подкраски, и сегментированный элемент управления связаны с событием изменения значения

...