我有一个带有静态单元格的tableView。
我不希望的是,当用户选择某个单元格时,该单元格中的文本将传递到先前的viewController。我以前从未使用过静态单元格,而且似乎只能找到有关激活单元格的教程和其他问题,因此它们转向了另一个viewController。
那么,当选定单元格时,如何传递数据(单元格中写入的内容)?
didSelectRowAtIndexPath中的代码吗?
我是否使用segues?那么,如果我有数百个单元,用户就可以选择数百个segue,对吗?
谢谢!
答案 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。