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

Passing data from a static tableViewCell to another viewController?

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

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

那么当单元格被选中时,我该如何传递数据(单元格中写的是什么)?

是didSelectRowAtIndexPath中的代码吗?

我使用 segues 吗?那么就得有几百个segue,如果我有几百个cell,用户可以选择,对吧?

谢谢!

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

改为:

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

将您的变量更改为

var chosenQuestion = ""

并且在 viewDidLoad()

DiaryQuestionLabel.text = chosenQuestion

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

中分配 IndexPath

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

例如, 如果您的数据源数组被调用,myArray,您可以执行以下操作:

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

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

最后,里面 viewDidLoad():
DiaryQuestionLabel.text = chosenQuestion

首先,您将字符串数组分配给 DiaryQuestionLabel.text,它仅在 destinationViewController 中接受字符串。只需在 destinationViewController 中将 chosenQuestion 的类型更改为 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
    }
}

简单的方法怎么样。这类似于 更多细节。

在你的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)
}

在你的新 VC 中:

class NewViewController: UIViewController {

  @IBOutlet weak var DiaryQuestionLabel: UILabel!

  var choosenQuestion = ""

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

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