将数据从静态tableViewCell传递到另一个viewController?

时间:2018-10-09 08:22:14

标签: ios swift uitableview segue uistoryboardsegue

我有一个带有静态单元格的tableView。

我不希望的是,当用户选择某个单元格时,该单元格中的文本将传递到先前的viewController。我以前从未使用过静态单元格,而且似乎只能找到有关激活单元格的教程和其他问题,因此它们转向了另一个viewController。

那么,当选定单元格时,如何传递数据(单元格中写入的内容)?

didSelectRowAtIndexPath中的代码吗?

我是否使用segues?那么,如果我有数百个单元,用户就可以选择数百个segue,对吗?

谢谢!

4 个答案:

答案 0 :(得分:0)

文本标签的类型为字符串。您正在为其分配一个字符串数组。 同样,将indexPath分配给Strings数组时也会犯同样的错误。 您正在弄乱类型。

更改为此:

vc?.chosenQuestion = tableView.cellForRow(at: selectedRowIndex).textLabel?.text

将变量更改为

var chosenQuestion = ""

在viewDidLoad()

DiaryQuestionLabel.text = chosenQuestion

答案 1 :(得分:0)

您正在尝试为变量分配错误的类型。这就是造成您错误的原因。 例如,
您已将chosenQuestion定义为一个字符串值数组,即[String],但是您试图在以下语句vc?.chosenQuestion = selectedRowIndex上分配一个IndexPath。

要解决您的问题,
您需要利用存储在IndexPath变量中的selectedRowIndex从数据源中提取特定的字符串。

例如, 如果您的数据源数组名为myArray,则可以执行以下操作:

var selectedRowIndex = self.tableView.indexPathForSelectedRow
vc?.chosenQuestion = myArray[selectedRowIndex]

然后更改您的变量,
var chosenQuestion = ""

最后,在viewDidLoad()内:
DiaryQuestionLabel.text = chosenQuestion

答案 2 :(得分:0)

首先,您要将字符串数组分配给DiaryQuestionLabel.text,该字符串仅在destinationViewController中接受字符串。只需将destinationViewController中的selectedQuestion类型更改为String,如下所示。

@IBOutlet weak var DiaryQuestionLabel: UILabel!
var chosenQuestion: String = ""

override func viewDidLoad() {
   super.viewDidLoad()
   DiaryQuestionLabel.text = chosenQuestion
}

在tableViewController中,您需要从数据源数组中传递用于在tableviewcell中设置数据的选定索引的值。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
     if segue.destination is UpdatingIdentifiers {
     let vc = segue.destination as? UpdatingIdentifiers
     let selectedRowIndex = self.tableView.indexPathForSelectedRow()
     // Get tableviewcell object from indexpath and assign it's value to chosenQuestion of another controller.  
     let cell = yourtableview.cellForRow(at: selectedRowIndex)
     let label = cell.viewWithTag(420) as! UILabel
     vc?.chosenQuestion = label.text
    }
}

答案 3 :(得分:0)

一个简单的方法怎么样。这类似于Ali_Habeeb's answer,但有更多详细信息。

在您的didSelectRowAt中:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let question = yourDataArray[indexPath.row]
    let storyboard = UIStoryboard(name: "StoryboardName", bundle: nil)
    let newVC = storyboard.instantiateViewController(withIdentifier: "newVCIdentifier") as! NewViewController
    newVC.choosenQuestion = question
    self.show(newVC, sender: self)
}

在您的newVC中:

class NewViewController: UIViewController {

  @IBOutlet weak var DiaryQuestionLabel: UILabel!

  var choosenQuestion = ""

  override func viewDidLoad() {
     super.viewDidLoad()
     DiaryQuestionLabel.text = choosenQuestion
  }
}

这是一种非常简单的格式,应该不会产生任何错误,如果有,请检查dataArray。