如何更改视图控制器中的标签 我要加载一个 tableviewcell 被选中? [复制]
Posted
技术标签:
【中文标题】如何更改视图控制器中的标签 我要加载一个 tableviewcell 被选中? [复制]【英文标题】:How do I change the label in a view controller I want to load a tableviewcell is selected? [duplicate] 【发布时间】:2020-11-23 16:25:07 【问题描述】:当用户点击一行时,我想转到一个视图控制器,该控制器将以所选行的名称作为标签文本。
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
let pvc = segue.destination as! ProfileViewController
let indexpath = tableView.indexPathForSelectedRow
if let unwrappedPath = indexpath
tableView.deselectRow(at: unwrappedPath, animated: true)
pvc.profileName.text = userList[unwrappedPath.row]
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
performSegue(withIdentifier: "goToProfile", sender: self)
第 66 行是以下代码:pvc.profileName.text = userList[unwrappedPath.row] pic.profileName.text 的 text 属性此时为 nil,即使我将 userList 路径中的字符串分配给标签的 text 属性。
控制台:
致命错误:在隐式展开可选值时意外发现 nil:文件 (filenamegoeshere)/FoundTableViewController.swift,第 66 行
【问题讨论】:
【参考方案1】:您正在尝试引用尚未实例化的视图 (profileName
)。
你应该像这样在ProfileViewController
中声明一个全局变量
var expectedString = ""
并像这样编辑您的 prepare(for segue: ...)
方法
guard let pvc = segue.destination as? ProfileViewController else return
let indexpath = tableView.indexPathForSelectedRow
if let unwrappedPath = indexpath
tableView.deselectRow(at: unwrappedPath, animated: true)
pvc.expectedString = userList[unwrappedPath.row]
然后你可以在ProfileViewController
的viewWillAppear
方法中设置你的标签文本:
override func viewWillAppear(_ animated: Bool)
profileName.text = expectedString
【讨论】:
非常感谢!以上是关于如何更改视图控制器中的标签 我要加载一个 tableviewcell 被选中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章