iphone - 根据按下的按钮将数据传递到 tableViewController

标签 iphone swift uitableview uiviewcontroller delegates

我是 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:从 ViewControllerTableViewController

在您的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/

相关文章:

iphone - 以编程方式更改按钮状态

iphone - 对于 Mac 环境来说,什么是好的版本控制?

swift - Alamofire:POST 请求,post 参数为 Json

ios - 只需在 cellforrow 中进行一次查询即可在 tableview 中快速实现相当大的跳跃

ios - 在 Swift 中运行应用程序时无法保存输入到 UITableView 的文本

IOS:选择时将 UITableView 中的选定项目显示到 UItextField

ios - swift subview 不会完全填充父 View

javascript - 在 iOS 4 的 UIWebView 中使用 javascript 进行重定向

ios - 快速从 DatePicker 获取日期/时间

ios - 如何在 Swift 5 中将电子表格数据预加载到 Core Data?