UISegmentedControl selectedIndex всегда показывает 0 - PullRequest
1 голос
/ 23 апреля 2019

Только начал изучать iOS. Я создал UISegmentedControl программно и инициализировал его двумя элементами. Кажется, я не понимаю, почему выбранный индекс всегда показывает 0.

Вот мой код:

let items = ["Watchlist", "Favorites"]

var segmentedControl: UISegmentedControl {
        let sc = UISegmentedControl(items: items)
        sc.selectedSegmentIndex = 0
        sc.addTarget(self, action: #selector(handleSegmentChange), for: .valueChanged)
        return sc
    }    


// Action for segment change
@objc fileprivate func handleSegmentChange() {
        print(segmentedControl.selectedSegmentIndex)
    }

1 Ответ

1 голос
/ 23 апреля 2019

Сегментированный элемент управления определяется как вычисляемое свойство , которое создает новый экземпляр UISegmentedControl со значением selectedSegmentIndex, равным 0, при каждом обращении к нему. Попробуйте вместо этого использовать закрытие инициализации свойства:

let segmentedControl: UISegmentedControl = {
    let sc = UISegmentedControl(items: items)
    sc.selectedSegmentIndex = 0
    sc.addTarget(self, action: #selector(handleSegmentChange), for: .valueChanged)
    return sc
}()
...