如何将表视图中的选定行字符串传递给另一个ViewController页面? (斯威夫特2)

时间:2016-03-27 21:39:26

标签: ios storyboard swift2

我正在运行Xcode 7.3并使用Swift 2.2。我在将数据从第一个视图控制器传递到第二个视图控制器时遇到问题。我在我的第一个视图控制器中创建了一个变量string,它保存了tableview中的选定行并且它可以工作。我还在我的第二个视图控制器中创建了另一个变量string,它应该包含所选行的名称,然后将文本传递给标签。

import UIKit
import Parse
import ParseUI

class FruitListPage: UIViewController, UITableViewDelegate, UITableViewDataSource {


var selectedFruit = String()

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let fruitName:Scanner2 = self.storyboard?.instantiateViewControllerWithIdentifier("scanPage") as! Scanner2
    fruitName.loadView()
    let nameShop = textArray[indexPath.row]
    print(nameShop)
    selectedFruit = nameShop

    print(selectedFruit)

    fruitName.selectedFruit2 = selectedFruit

}

在第一个视图控制器中,所有东西都可以完全正常工作,每次在tableview中按一行时,我都可以看到水果名称。真正的问题是第二个视图控制器中的selectedFruit2字符串永远不会从第一个视图控制器中获取数据。任何线索?

import UIKit
import Parse

class Scanner2: UIViewController {

@IBOutlet var fruitNameLabel: UILabel!

var selectedFruit2 = String()

override func viewDidLoad() {
    super.viewDidLoad()

    print(selectedFruit2)

}

}

4 个答案:

答案 0 :(得分:1)

您可以尝试创建一个全局变量,并在override func prepareForSegue方法中使用tableView.indexPathForSelectedRow!.row对其进行初始化。这就是我做到的,它运作良好。

答案 1 :(得分:0)

在你的tableView中尝试这个:didSelectedRowAtIndexPath:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let fruitName:Scanner2 = self.storyboard?.instantiateViewControllerWithIdentifier("scanPage") as! Scanner2
    selectedFruit = textArray[indexPath.row]
    fruitName.selectedFruit2 = selectedFruit
    self.presentViewController(fruitName,animated:true,completion:nil)
}

答案 2 :(得分:0)

你可以试试这个:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let indexPath = self.tableView.indexPathForSelectedRow {
let destinationVC = segue.destinationController
destinationVC.string = textArray[indexPath] //this is the string in second view controller
}
}

答案 3 :(得分:0)

将storyBoard中的viewController与segue连接,并将其标识符设置为“scanPageSegue”,例如......然后:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    performSegueWithIdentifier("scanPageSegue", sender: textArray[indexPath.row])
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "scanPageSegue" {
        if let fruitName = segue.destinationViewController as? Scanner2, 
           selectedFruit = sender as? String {
            fruitName.selectedFruit2 = selectedFruit
        }
    }
}