Вызов действий кнопки в сегментированном управлении

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

@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")
        }
  }

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

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


person Coder221    schedule 10.06.2019    source источник
comment
segmentedControl.selectedSegmentIndex код необходимо поместить в segmentChanged, а не в buttonsTapped, если в segmentedControl ничего не изменилось, то selectedSegmentIndex будет равен нулю   -  person Vinodh    schedule 10.06.2019
comment
Что ж, я хочу, чтобы данные печатались на консоли как с помощью метода сегментированного изменения, так и метода нажатия кнопок.   -  person Coder221    schedule 10.06.2019
comment
@ Coder221 - вы хотите выполнить это действие с помощью кнопки или иначе   -  person Anbu.Karthik    schedule 10.06.2019
comment
@ Anbu.Karthik Да, при нажатии кнопки из сегментированного элемента управления или есть способ лучше отображать данные с обоих концов?   -  person Coder221    schedule 10.06.2019
comment
да, мы можем ...   -  person Anbu.Karthik    schedule 10.06.2019
comment
@ Anbu.Karthik, тогда ответь, пожалуйста.   -  person Coder221    schedule 10.06.2019


Ответы (2)


Вам нужно установить 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)
    }
}
person Mayur Karmur    schedule 10.06.2019
comment
Он был настроен для .valueChange - person Coder221; 10.06.2019
comment
imgur.com/a/n1xNBdl. Я пытаюсь получить одинаковые данные как от кнопок, так и от сегментированных элементов управления. Надеюсь, мой вопрос был ясен. - person Coder221; 10.06.2019
comment
@ Coder221, Ничего страшного, тогда что происходит? - person Mayur Karmur; 10.06.2019
comment
Поделитесь демонстрационным проектом. - person Mayur Karmur; 10.06.2019
comment
Как мне получить первый сегмент и первую нажатую кнопку, когда я нажимаю на первый сегментированный элемент управления и аналогично Первый сегмент и вторая кнопка, первый сегмент и третья кнопка? - person Coder221; 10.06.2019
comment
Давайте продолжим это обсуждение в чате. - person Mayur Karmur; 10.06.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
    }
}

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

person Vinodh    schedule 10.06.2019
comment
Я пытаюсь отобразить данные с обоих концов. Я успешно заставил его работать с кнопками, как описано в вопросе. Как упоминалось выше, я был частично успешен для метода segmentChanged, вызвав .touchUpInside для одной кнопки, и запутался в том, как реализовать для оставшихся двух кнопок. - person Coder221; 10.06.2019