【问题标题】:Passing Data Through UITableViews In Multiple Segues in Xcode (Three Segues)Xcode中多个Segues中通过UITableViews传递数据(三个Segues)
【发布时间】:2017-04-27 03:38:53
【问题描述】:

我的设置是三个视图控制器,前两个带有 UITableView,第三个带有图像。

Layout

我想通过使用 UITableViews 的 segues 将数据从 firstViewController 传递到 secondViewController,然后将两组数据传递到 thirdViewController。

我用来从 firstViewController 传递到 secondViewController 的代码如下:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    performSegue(withIdentifier: "identifier1", sender: candy[indexPath.row])
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let selectedCandy = segue.destination as? SecondViewController
    selectedCandy?.showCandy = sender as? String
}

secondViewController 中的代码非常相似:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    performSegue(withIdentifier: "identifier2", sender: flavors[indexPath.row])
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let selectedFlavor = segue.destination as? ThirdViewController
    selectedFlavor?.showFlavor = sender as? String
}

我所做的要点是在 firstViewController UITableView 中选择一个 Candy,在 secondViewController UITableView 中选择一个 Flavor,然后在 thirdViewController 中有一个标签 FLAVOR CANDY 和选择的图像。

Flavor 的标签会显示。糖果的标签没有。如何将 Candy 的 segue 中的选择传递给 thirdViewController?

提前非常感谢。

【问题讨论】:

  • 您应该将糖果传递给最后一个控制器,在第二个 VC 中的 prepareFor:sender: 中。控制器应该有来自第一个 VC 的 showCandy 实例变量。将其传递给第三个 VC。此外,您的变量名称不是最佳的,令人困惑。
  • showCandy 听起来确实像一个方法,或者Bool,它真的应该是selectedCandy。在prepareFor:sender: 中,您将目标视图控制器的局部变量命名为selectedXXX,而它们确实应该采用类型名称(camelCased,如secondViewController)或至少以Controller 结尾。 selectedCandy 听起来像是被选中的对象。
  • 谢谢谢恩!快速跟进:我将 secondViewController 中的代码修改为: override func prepare(for segue: UIStoryboardSegue, sender: Any?) { let selectedFlavor = segue.destination as? ThirdViewController selectedFlavor?.showFlavor = sender as?字符串让 selectedCandy = segue.destination 为? ThirdViewController selectedCandy?.showCandy = sender as? String } 但是,现在它显示了两次 Flavor 而不是 Flavor-Candy。任何想法我做错了什么?非常感谢您的帮助!

标签: ios xcode uitableview segue identifier


【解决方案1】:

FirstViewController

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "identifier1", sender: self.candy[indexPath.section])
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "identifier1" {
            let goNext = segue.destination as! SecondViewController
            goNext.showCandy = sender as! String
        }
    }

第二视图控制器

var showCandy = ""

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "identifier2", sender: self.flavors[indexPath.section])
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "identifier2" {
            let goNext = segue.destination as! ThirdViewController
            goNext.showCandy = showCandy
            goNext.showFlavor = sender as! String
        }
    }

第三视图控制器

var showCandy = ""
var showFlavor = ""

override func viewDidLoad() {
        super.viewDidLoad()
        print(showCandy)
        print(showFlavor)
 }

【讨论】:

  • 谢谢@iParesh。这完全回答了我的问题。你摇滚!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多