如何使用 prepareForSegue (Swift 4, Xcode 9) 将 UIButton 的标签(一个 Int)传递给其他 ViewController

卡伦·麦卡特

我正在构建一个带有 2 个 ViewController 的 iOS 应用程序,第一个是StartViewController.swift,第二个是ViewController.swift

StartViewController 显示了 9 个 UIButton,我在 Xcode 的属性检查器中为每个 UIButton 分配了一个单独的标签,即从 0 到 8 的整数。

每个按钮代表一些用户想要了解更多的主题。因此,我的项目中有另一个文件,我在其中创建了一系列标题和相应的文本,这些文本代表了我想要向用户显示的相关信息。第二个 VC (ViewController.swift) 有 2 个 UILabels,分别显示标题和文本。

简而言之,我想获取按钮的标签(一个 Int)并使用 ist 输出带有数组中相应索引的主题信息。

我已将两个 VC 与一个名为startToTopicSegue的 UIStoryboardSegue 连接起来然后我实现了 prepare(for segue:) 方法并设置了按钮。通过打印语句,我已经确认 1) StartViewController.swift 中的 sender.tag 确实是点击按钮的标签,2) tagPassedOver 变量在 ViewController.swift 中设置了标题和文本标签。

但是 tagPassedOver 完全不受我在 viewDidLoad() 中指定的影响,而是将初始值保持为 0 - 我该如何更改?

我有一种强烈的感觉,它与第一个 VC 中发件人的规范有关,但现在我在这里翻译有点迷失,所以任何帮助将不胜感激;) - 谢谢!

StartViewController.swift

@IBAction func buttonPressed(_ sender: UIButton) {
    print(sender.tag)

    performSegue(withIdentifier: "startToTopicSegue", sender: UIButton.self)
}

func prepare(for segue: UIStoryboardSegue, sender: AnyObject) {
    if segue.identifier == "startToTopicSegue"{
        let destinationVC = segue.destination as! ViewController
        destinationVC.tagPassedOver = sender.tag
    }
}

视图控制器.swift

var tagPassedOver : Int = 0

@IBOutlet weak var headingLabel: UILabel!
@IBOutlet weak var textLabel: UILabel!

override func viewDidLoad() {

    headingLabel.text = allTopics.list[tagPassedOver].topicHeading
    textLabel.text = allTopics.list[tagPassedOver].topicText
拉克夏·夏斯特里

你应该传递实例UIButton用户需要一个标签。

@IBAction func buttonPressed(_ sender: UIButton) { 
    print(sender.tag)
    performSegue(withIdentifier: "startToTopicSegue", sender: sender) // You have required button in sender, so pass that as sender
}

并在prepare方法中将发件人转换为UIButton并检索它。

func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "startToTopicSegue"{
        let destinationVC = segue.destination as! ViewController
        if let button = sender as? UIButton {
            destinationVC.tagPassedOver = button.tag
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章