我是 swift 的初学者,但我在 HTML、CSS 和一些 Java 方面确实有不错的背景。我创建这个帐户实际上只是为了问这个问题,所以我会开门见山。
我真的很喜欢 swift,但我真的花了一周的时间一遍又一遍地编写同样的代码,查阅了无数的教程、书籍、指南等。我不会撒谎,当我不断尝试解决这个问题时,我真的厌倦了看到编译器中堆积了 10 多个错误。
我有一个 ViewController,还有一个 TableViewController - ViewController 是我的主屏幕。在所说的 viewController 上,我有两个按钮,一个用于 BuildingItems,另一个用于 BuildingBlocks。两者都是segue。
在我的 TableViewController 上,我有 buildBlocks 和 buildItems,它们都定义了数组。
我想要做的是取决于用户选择的按钮,我希望它成为用于填充我的表格 View 的数据。我可以使用普通的 cell.textLabel?.text = arrayNameHere[indexPath.row] 专门填充表格 View ,但显然这并不能解决我的问题。
我希望你能帮助我。我为蹩脚的语法和格式表示歉意,这一周我实际上每天花了 4-5 个小时试图让它发挥作用,结果我生气了,并三次删除了我的整个项目。我将包含下面的代码。再次,请原谅格式。我不知道为什么我似乎无法快速弄清楚,我一直在尝试委托(delegate)的每种变体,试图传递一些让它工作的东西,但没有任何效果。
View Controller :
@IBAction func BuildItems (_sender: Any) {
}
@IBAction func BuildBlocks (_sender: Any) {
}
在 TableViewController 中:
let buildItems = ["these are all my", "arrays for this"]
let buildBlocks = ["same thing here","just saving time"]
class TableViewController: UITableViewController {
var myIndex = 0
override func tableView(_ tableView: UITableView, numberOfRowsInSection: Int) -> Int {
return buildItems.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell" for: indexPath)
cell.textLabel?.text = buildItems[indexPath.row]
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
myIndex = indexPath.row
}
}
最佳答案
您只需要 1 个 segue:从 ViewController
到 TableViewController
。
在您的ViewController
中创建一个按下按钮的变量:
var category = ""
按下按钮时更改值,然后继续:
@IBAction func BuildItems (_sender: Any) {
category = "BuildItems"
self.performSegue(withIdentifier: "segue", sender: self)
}
@IBAction func BuildBlocks (_sender: Any) {
category = "BuildBlocks"
self.performSegue(withIdentifier: "segue", sender: self)
}
然后在准备
中:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segue" {
let vc = segue.destination as! TableViewController
// Assuming you created a variable called sentCategory in the TableViewController
vc.sentCategory = category
}
}
在您的TableViewController
中创建一个空数组:
let data = [String]()
在viewDidLoad
中:
if sentCategory == "BuildItems" {
data = buildItems
} else {
data = buildBlocks
}
使用 data
变量填充您的 TableView
。
一些评论:
- 将所有内容保留在您的类范围内,除非您有充分的理由不这样做。
- 在这种情况下您不需要委托(delegate)。使用
prepare
函数传递数据,如上所示。
关于iphone - 根据按下的按钮将数据传递到 tableViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44724976/