首页 > 解决方案 > 在 ViewController 中加载分段视图,但 UISegmentControl 在 UIView 类中

问题描述

我创建了一个 UIView 类 (SegmentControl.swift) 并使用 xib 添加了 UISegmentControl。我有另一个视图控制器,我在其中引用这个 UIView 类来添加段控件。

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

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

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

这是我的代码:

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 类中,我将如何在切换段时加载它们。我在这里找不到任何答案。请帮忙!

谢谢!!

标签: iosswiftuisegmentedcontrol

解决方案


即使目标包含在另一个视图中,您也可以将目标添加到分段控件。分段控件是SegmentControl类上的可访问属性。从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)
}

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


推荐阅读