【问题标题】:Load segmented views in ViewController but UISegmentControl is in UIView class在 ViewController 中加载分段视图,但 UISegmentControl 在 UIView 类中
【发布时间】:2020-05-21 23:24:13
【问题描述】:

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

谢谢!!

【问题讨论】:

标签: ios swift uisegmentedcontrol


【解决方案1】:

您可以将目标添加到分段控件,即使它包含在另一个视图中。分段控件是 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)
}

除此之外,交换 segmentControlsegmentView 可能会让不熟悉您的代码的人感到困惑。可能为 SegmentControl 使用更具描述性的名称,例如 SegmentControlContainer 或其他有助于区分的名称。

【讨论】:

    猜你喜欢
    • 2015-05-05
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多