重用细分控件

时间:2019-02-13 11:58:11

标签: ios swift uisegmentedcontrol

我已经像这样进行了段控制...

  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。在viewController的viewDidLoad中,我添加了以下几行。

    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个细分和不同细分选项的另一个细分控件,那么我不想在该视图中拖动另一个细分控件并再次重复上述代码/过程。但是相反,我只想在应用程序中的某个位置添加/拖动段​​控件一次,并在枚举中包含(段控件的)其他选项,并在必要时使用它们。我能做到吗?

2 个答案:

答案 0 :(得分:0)

您可以使用它, 请注意,添加标题时将使用您发送选项的顺序。

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。

答案 1 :(得分:0)

您可以这样创建一个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是Options的数组,yourDesiredFrame是希望UISegmentControl拥有的框架,而yourView是要在其中添加此UISegmentControl的视图。