在swift中在表视图之间传递数据

时间:2017-01-11 07:41:51

标签: ios arrays swift uitableview

尝试使用tableviews编写关于我们页面的代码。我能够为"关于我们"创建第一个表格视图。组件

 var aboutUs = ["About us", "Contact us", "Privacy policy"]

必须将此项目传递给包含aboutUsDetails

的下一个表格视图
 var aboutUsDetails = ["A team of docs and coders ","Contact us at editor@gmail.com","Privacy Policy will be updated soon"]

我已经像这样创建了segue函数

    override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
     if segue.identifier == SegueDetailsTableViewController
     {
    let detailViewController = segue.destination as! DetailsTableViewController
        let myIndexPath = self.tableView.indexPathForSelectedRow!
        let row = myIndexPath.row
    detailViewController.aboutUsDetails = aboutUs[row]
}

我在这里有点困惑因为aboutUsDetails是[String];它没有传递?我该如何克服这个问题?

3 个答案:

答案 0 :(得分:1)

如果您尝试仅传递 一个字符串,则无需将aboutUsDetails属性声明为字符串数组,而只需将其作为单个字符串:

DetailsTableViewController

aboutUsDetails: [String]?更改为aboutUsDetails: String?

如果您要实现以下代码段,则应按如下方式更改它们:

改变这个:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return aboutUsDetails.count
}

到此:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

并改变这一点:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // you might want to have a custom cell, you don't have to change it...
    let cell = tableView.dequeueReusableCell(withIdentifier: "MyCellId")

    cell?.textLabel?.text = aboutUsDetails[indexPath.row]
}

到此:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // you might want to have a custom cell, you don't have to change it...
    let cell = tableView.dequeueReusableCell(withIdentifier: "MyCellId")

    // this is part you should foucing on...
    cell?.textLabel?.text = aboutUsDetails
}

注意:您可能需要执行可选绑定以显示aboutUsDetails的值(不包含"可选(" ...")&# 34。)

如果你坚持将aboutUsDetails声明为一个字符串数组(我认为没有必要这样做),你需要将你的字符串作为包含一个字符串的数组传递,如下所示:

override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == SegueDetailsTableViewController
        {
            let detailViewController = segue.destination as! DetailsTableViewController
            let myIndexPath = self.tableView.indexPathForSelectedRow!
            let row = myIndexPath.row
            // here is the change, you are passing your string as the first
            // (and the only one) element of 'aboutUsDetails'
            detailViewController.aboutUsDetails = [aboutUs[row]]
        }
    }

希望这会有所帮助。

答案 1 :(得分:0)

aboutUs [row]是一个字符串,aboutUsDetails似乎是一个字符串数组。您可以将aboutUsDetails更改为String,或者像这样传递数据:

{{1}}

答案 2 :(得分:0)

您只需要进行一项更改,并且非常小到低于行

 detailViewController.aboutUsDetails = [aboutUs[row]] 

因为aboutUs [row]是字符串而且[aboutUs [row]]是String of Array,你不能将String分配给aboutUsDetails,这是一个String数组。