如何更改视图控制器中的标签 我要加载一个 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]
      

然后你可以在ProfileViewControllerviewWillAppear方法中设置你的标签文本:

override func viewWillAppear(_ animated: Bool)

    profileName.text = expectedString

【讨论】:

非常感谢!

以上是关于如何更改视图控制器中的标签 我要加载一个 tableviewcell 被选中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用标签栏控制器离开视图时如何关闭视图

使用 nib 中的视图重新加载 UIView 属性

根据标签栏索引更改视图控制器的属性?

如何使用新数据重新加载或刷新选项卡栏控制器的选项卡栏中的数据?

如何从另一个视图控制器更改标签的文本并使用核心数据保存

如何保持标签栏顺序一致但更改默认视图控制器?