gpt4 book ai didi

ios - 如何使用容器 View 中的分段控件来控制我的主视图

转载 作者:行者123 更新时间:2023-11-29 05:30:32 38 4
gpt4 key购买 nike

我正在制作一个测验应用程序。我有父 TableView Controller ,它可以处理除分段控件和具有可滚动分段控件的子容器 View 之外的所有内容。我不太明白如何连接父 View Controller 和 subview Controller ,因此我可以使用分段控件来更改问题。

我尝试在子 vc 文件中使用此代码,但它没有提供将段索引与父 vc 中的问题号变量等同的选项。

class ScrollSegmentVC: UIViewController {

@IBOutlet weak var segmentedControl: UISegmentedControl!

override func viewDidLoad() {
super.viewDidLoad()

}
@IBAction func segmentPressed(_ sender: UISegmentedControl) {
print(segmentedControl.selectedSegmentIndex)
if let firstVC = parent as? FirstTableViewController {
...
}
}

1

Screen Shot1

2

Screen Shot2

更新。我按照建议使用了委托(delegate)方法。一切顺利,但现在我无法将数据传递回容器 View 。

protocol ScrollSegmentDelegate {
func segmentIsChosen(segment: Int)
}

class ScrollSegmentVC: UIViewController {

@IBOutlet weak var segmentedControl: UISegmentedControl!

var delegate: ScrollSegmentDelegate?
var questionNumberToReceive = 0

override func viewDidLoad() {
super.viewDidLoad()
}

@IBAction func segmentPressed(_ sender: UISegmentedControl) {
let segment = segmentedControl.selectedSegmentIndex
delegate?.segmentIsChosen(segment: segment)
print("scroll:\(questionNumberToReceive)")
}
class FirstTestTableViewController: UITableViewController, ScrollSegmentDelegate {

func segmentIsChosen(segment: Int) {
print(segment)
questionNumber = segment + 1
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segment" {
let destSegmentVC = segue.destination as! ScrollSegmentVC
destSegmentVC.questionNumberToReceive = questionNumber
destSegmentVC.delegate = self
}
}

无论我在哪里调用segue

performSegue(withIdentifier: "segment", sender: self)

我收到错误:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'There are unexpected subviews in the container view. Perhaps the embed segue has already fired once or a subview was added programmatically?'

如果我在某个时候不调用 segue - 我不会得到更新的变量

最佳答案

我已经找到了解决方案。

class FirstTestTableViewController: UITableViewController, ScrollSegmentDelegate {

func segmentIsChosen(segment: Int) {
print(segment)
questionNumber = segment + 1
}

var questionNumber = 0

func updateQuestionNumber() {
questionNumber + 1
scrollSegmentVC?.questionNumberToReceive = questionNumber
}

var scrollSegmentVC: ScrollSegmentVC?

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segment" {
scrollSegmentVC = segue.destination as? ScrollSegmentVC
scrollSegmentVC?.delegate = self
}
}

关于ios - 如何使用容器 View 中的分段控件来控制我的主视图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57645239/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com