在 ViewController 中加载分段视图,但分段控件在 UIView class 中

Load segmented views in ViewController but UISegmentControl is in UIView class

我创建了一个 UIView class (SegmentControl.swift) 并使用 xib 添加了 UISegmentControl。我有另一个 viewcontroller,我在其中引用此 UIView class 来添加段控件。

我的问题是因为我在另一个 UIView class 中有 UISegmentControl,我将如何更新索引并在 ViewController 中加载相应的 containerView?

@IBAction func didChangeIndex(_ sender: UISegmentedControl) { } 仅当我在 ViewController 中有段控制时才有效。

当 UIControlSegment 在另一个 class 中时,请提供有关如何加载容器视图的建议。

这是我的代码:

SegmentControl.swift

class SegmentControl: UIView {

  @IBOutlet weak var segmentView: UISegmentedControl!
  // Loading nibs are there.. just that I didn't include here

  func create(titles: [String]) {
       items.enumerated().forEach { (index, item) in
           segmentView.setTitle(item, forSegmentAt: index)
       }
   }   
}

ViewController.swift

func showSegmentControl() {
    let segmentedView = GenericSegmentedView.create(items: ["A", "B"])
    stackView.addArrangedSubView(segmentedView)
}

两个容器视图 --> aInfoView 和 bInfoView 在 View Controller 中初始化。

由于它们在 UIView class 中,因此我将如何在切换段时加载它们。我在这里找不到任何答案。请帮忙!

谢谢!!

您可以将目标添加到分段控件,即使它包含在另一个视图中。分段控件是 SegmentControl class 上的可访问 属性。从 SegmentControl 的父视图控制器将目标操作添加到您的 SegmentControl 的子视图控制器 segmentView

func showSegmentControl() {
    let segmentedView = GenericSegmentedView.create(items: ["A", "B"])
    stackView.addArrangedSubView(segmentedView)
    segmentedView.segmentView.addTarget(self, action: #selector(segmentControlChanged(_:)), for: .valueChanged)
}
// Function will be called when value changed on the SegmentControl's segmentView
@objc func segmentControlChanged(_ sender: UISegmentedControl) {
    print(sender.selectedSegmentIndex)
}

顺便说一句,互换 segmentControlsegmentView 可能会让不熟悉您的代码的人感到困惑。也许 SegmentControl 的更具描述性的名称,如 SegmentControlContainer 或其他名称将有助于区分。