Как я могу установить состояние по умолчанию UISegmentedControl? - PullRequest
16 голосов
/ 22 июня 2009

Есть ли способ установить начальный выбранный сегмент в UISegmentedControl в Интерфейсном Разработчике, или я должен сделать это в коде? Если это в коде, является ли viewDidLoad лучшим местом для его установки?

Ответы [ 4 ]

39 голосов
/ 22 июня 2009

Из кода вы можете просто сделать self.segmentedControl.selectedSegmentIndex = someDefaultIndex.

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

15 голосов
/ 22 июня 2009

В Интерфейсном Разработчике, когда вы выбираете объект UISegmentedControl в своем пользовательском интерфейсе, затем в панели атрибутов, в сегментном управлении есть раскрывающееся меню сегмента, выберите сегмент, который вы хотите выбрать (0,1 и т. Д.) И отметьте опцию «выбранный» под ним.

0 голосов
/ 06 августа 2017

После нажатия на Сегментированный элемент управления перейдите туда, где вы создали сегменты, и выберите тот, который вы хотите использовать по умолчанию. Затем ниже этого будет поле с «выбранным» им. Выберите это, и это будет по умолчанию.

0 голосов
/ 29 июля 2017

Если вы не используете раскадровки и хотите установить индекс по умолчанию после некоторой настройки / работы в сети, как я, этот маленький фрагмент кода выберет что-то, если пользователь этого не сделал. Я поместил это в мой подкласс UISegmentedControl, но вы можете разместить это где угодно. ( Swift 3 )

Decl: var UISegmentedControlNoSegment: Int { get }
Desc: A segment index value indicating that there is no selected segment. See selectedSegmentIndex for further information.

Короткая версия:

if selectedSegmentIndex == UISegmentedControlNoSegment {
    selectedSegmentIndex = initialIndex
}

Более длинная версия

func reloadData() {
    guard let numberOfItems = dataSource?.numberOfItems() else {
        return
    }

    removeAllSegments()

    for index in 0...numberOfItems {
        insertSegment(with: $image, at: index, animated: false)
    }

    if selectedSegmentIndex == UISegmentedControlNoSegment {
        selectedSegmentIndex = initialIndex
    }
}
...