Повторное использование сегмента управления - PullRequest
0 голосов
/ 13 февраля 2019

Я сделал элемент управления сегментом следующим образом ...

  1. Я перетащил элемент управления сегментом в контроллер представления в раскадровке и сделал его 5 сегментами.

2.Я сделал класс с именем Enums.swift, вот так ...

import UIKit

enum HomeOptions: String, RawRepresentable {
  case ViewAll, News, Articles, Post, Offers

  var title: String {
    switch self {
    case .ViewAll:
      return "View All"
    case .News:
      return "News"
    case .Articles:
      return "Articles"
    case .Post:
      return "Post"
    case .Offers:
      return "Offers"
    }
  }

}

3.В viewDidLoad viewController я добавил эти строки ..

    homeSegment.selectedSegmentIndex = 0

    homeSegment.setTitle(HomeOptions.ViewAll.title, forSegmentAt: 0)
    homeSegment.setTitle(HomeOptions.News.title, forSegmentAt: 1)
    homeSegment.setTitle(HomeOptions.Articles.title, forSegmentAt: 2)
    homeSegment.setTitle(HomeOptions.Post.title, forSegmentAt: 3)
    homeSegment.setTitle(HomeOptions.Offers.title, forSegmentAt: 4)

Теперьэти строки кода устанавливают соответствующие имена в соответствующих сегментах.

Но меня беспокоит следующее:

Если мне нужно добавить другой элемент управления сегментами в другом месте приложения, скажем, с 3 сегментами идругие параметры сегмента, тогда я не хочу перетаскивать другой элемент управления сегмента в этом представлении и повторять вышеупомянутый код / ​​процедуру снова.Но вместо этого я хочу добавить / перетащить элемент управления сегментом только один раз где-нибудь в приложении, а также включить другие параметры (элемента управления сегментом) в Enums и использовать их по мере необходимости.Могу ли я достичь этого ..?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Вы можете создать UISegmentControl следующим образом:

let segmentControl = UISegmentedControl.init()
for i in 0..<yourOptions.count {
    let option = yourOptions[i]
    segmentControl.setTitle(option.title, forSegmentAt: i)
}
segmentControl.frame = yourDesiredFrame
yourView.addSubView(segmentControl)

здесь yourOptions - это массив опций, yourDesiredFrame - это фрейм, который должен иметь UISegmentControl, а yourView - это представление, в которое вы хотите добавитьэтот UISegmentControl.

0 голосов
/ 13 февраля 2019

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

func getSegmentControl(with options: [HomeOptions]) -> UISegmentedControl{
    let segmentControl = UISegmentedControl.init()
    for i in 0..<options.count {
        segmentControl.setTitle(option.title, forSegmentAt: i)
    }
    //do additional operations here
    return segmentControl
}

Предложение - Измените имя вашего перечисления с HomeOptions на HomeOption.

...