如何将选定单元格中的数据传递给另一个视图控制器?

时间:2018-12-03 15:22:33

标签: ios swift label global-variables tableview

下面的代码显示在TableView中单击的任何单元格的内容。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)  {
    print(self.cell[indexPath.row])
}

我想使用打印在另一个ViewController上的标签中的结果。

如何从函数中获取字符串值,然后在另一个视图上使用它?我的想法是使用全局变量,但我需要首先获取字符串值。

2 个答案:

答案 0 :(得分:-1)

首先,当您创建tableView时,必须收集数组或其他数据集合中单元格的数据(此处为 string )。您可以在方法 indexPath 中使用 didSelectRowAt 变量获取所需的数据(字符串)。您可以通过多种方式将字符串传递给另一个ViewController(让我们使用 SecondViewController )。

这里是一个例子:

// declaration an array of your strings
var array : [String] = ["First", "Second", "Third", ...]
...
// getting a string from method:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)  {
let string = array[indexPath.row]
print(string)
// next, for example, you need to pass the string to a singleton SecondViewController with static var **main**:
SecondViewController.main?.neededString = string
}

不要忘记在异步DispatchQueue中进行更新:

DispatchQueue.main.async {
    SecondViewController.main?.updateUI(withString : string)
}

答案 1 :(得分:-1)

例如,您可以对var SecondScreen 使用另一个ViewController(main)的单例进行简单组织(以防万一,当{{1} }是通过情节提要板初始化的):

SecondScreen

您可以像这样更新SecondScreen:

class SecondScreen : UIViewController {
    // 1. add this var
    static var main : SecondScreen? = nil

    // 2. Your some UI element
    @IBOutlet weak var textButton: UIButton!

    // 3. add this method
    func updateUI(string : String) {
        textButton.setTitle(string, for: .normal)
    }

    // 4. setting a var
    override func viewDidLoad() {
        if SecondScreen.main == nil {
            SecondScreen.main = self
        }
    }

    // ... another your and standard methods
}

我还建议您调用异步方法:

    let v = SecondScreen.main
    v?.updateUI(string: "yourString")

我建议您了解有关单例的更多信息...