将数据从静态 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。
我有一个带有静态单元格的 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
.
要解决您的问题,
您需要利用存储在 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。