Изменить цвет заголовка сегмента управления на переключателе сегмента в Swift - PullRequest
0 голосов
/ 31 октября 2019

У меня есть контроллер представления, на котором у меня есть управление сегментами, и я переключаю сегменты жестом смахивания, теперь я хочу, чтобы при переключении сегментов текущий цвет заголовка сегмента становился белым, а оставшийся цвет становился серым, я искал об этомно я получил результаты для изменения цвета фона, как я могу изменить цвет заголовка элемента управления сегмента при переключении между сегментами? Это мой код для сегмента при смахивании,

 let titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.red]
    segmentControl.setTitleTextAttributes(titleTextAttributes, for: .selected)
    segmentControl.fallBackToPreIOS13Layout(using: UIColor.clear)
    let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.swipedRight))
    swipeRight.direction = UISwipeGestureRecognizer.Direction.right
    self.activeView.addGestureRecognizer(swipeRight)

    let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(self.swipedLeft))
    swipeLeft.direction = UISwipeGestureRecognizer.Direction.left
    self.closedView.addGestureRecognizer(swipeLeft)

 @objc func swipedRight(){
    segmentControl.selectedSegmentIndex = 0
    self.activeView.isHidden = false
    self.closedView.isHidden = true
    let titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
    segmentControl.setTitleTextAttributes(titleTextAttributes, for: .selected)
    let titleText = [NSAttributedString.Key.foregroundColor: UIColor.gray]
    segmentControl.setTitleTextAttributes(titleText, for: .disabled)

    getActiveQuestionAPI()
}

@objc func swipedLeft(){
    segmentControl.selectedSegmentIndex = 1
    self.activeView.isHidden = true
    self.closedView.isHidden = false
    let titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
    segmentControl.setTitleTextAttributes(titleTextAttributes, for: .selected)
    let titleText = [NSAttributedString.Key.foregroundColor: UIColor.gray]
    segmentControl.setTitleTextAttributes(titleText, for: .disabled)

    getCloseQuestionAPI()
}

1 Ответ

3 голосов
/ 31 октября 2019

Для проверки, когда изменяется управляющее значение сегмента, вы можете использовать метод addTarget следующим образом.

segmentControl.addTarget(self, action: #selector(onSegmentedControlValueChanged(_:)), for: .valueChanged)

Затем просто внедрите onSegmentedControlValueChanged, как вы делали с вашими предыдущими методами, такими как:

@objc func onSegmentedControlValueChanged(_ sender: UISegmentedControl) {
  // Do something when segment control value changes
}

Для изменения текста заголовка элемента управления вашего сегмента вам не нужно проверять, когда значение изменяется, и вы можете добиться этого, просто используя следующий фрагмент кода:

let titleTextAttributesForSelected = [NSAttributedString.Key.foregroundColor: UIColor.white]
let titleTextAttributesForNormal = [NSAttributedString.Key.foregroundColor: UIColor.black]
segmentControll.setTitleTextAttributes(titleTextAttributesForSelected, for: .selected)
segmentControll.setTitleTextAttributes(titleTextAttributesForNormal, for: .normal)

Это все, что вам нужно для измененияЦвет заголовка сегмента для разных состояний.

...