ios - 在 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 类中,我将如何在切换段时加载它们。我在这里找不到任何答案。请帮忙!
谢谢!!
解决方案
即使目标包含在另一个视图中,您也可以将目标添加到分段控件。分段控件是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
或其他东西的更具描述性的名称将有助于区分。
推荐阅读
- spring - Thingsboard 性能测试
- node.js - 为什么 MongoDB 在路径中添加额外的斜杠?
- scala - Talend 能否为 Apache Spark 生成 Scala 代码?
- docker - 无法在 tcp://localhost:2375 连接到 Docker 守护进程
- javascript - dayjs 返回格式错误的日期
- xml - 如何修复“此文档已经有一个 'DocumentElement' 节点。”
- php - 此路由不支持 put
- html - 如何处理引导程序中的网格,网格内的网格
- javascript - JS过滤器/映射来获取对象之间
- c# - 当我打开一个新表单两次时,OpenForms 不会运行