【问题标题】:How to pass tableView label to name variable in another viewController?如何将 tableView 标签传递给另一个 viewController 中的名称变量?
【发布时间】:2020-09-07 12:06:28
【问题描述】:

我正在为一个学校项目创建一个应用程序,并且我有一个带有标签的 tableView,其中包含单元格的名称,我试图将标签的名称传递给我的第二个 viewController 上的 navTitle 变量.我尝试了多种方法来实现这一点,但都没有运气。

我尝试打印传递的标题,但它打印输出'nil'

主页视图

var names = ["Accomodation", "Facilities", "Things To Do", "About"]

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return names.count
    }
    
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "homeCell", for: indexPath) as? homeTableViewCell
     
        cell?.label.text = names[indexPath.row]

        return cell!
    }
    
    //Passing data
    var nameChosen : String?
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        self.tableView.deselectRow(at: indexPath, animated: true)
        nameChosen = names[indexPath.row]
        
        performSegue(withIdentifier: "accomodationSegue", sender: self)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let destinationVC = segue.destination as? accomodationViewController
        destinationVC?.navTitle = nameChosen
    }

住宿视图

var navTitle: String?

override func viewDidLoad() {
        super.viewDidLoad()
      
        print(navTitle)
        // Do any additional setup after loading the view.
    }

【问题讨论】:

  • 是否调用了prepareForSegue

标签: ios swift uitableview


【解决方案1】:

最简单的方法是将名称作为sender 参数传递,不需要nameChosen 属性。

最好检查prepare(for segue中的segue标识符

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.tableView.deselectRow(at: indexPath, animated: true)
    let name = names[indexPath.row]
    
    performSegue(withIdentifier: "accomodationSegue", sender: name)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard segue.identifier == "accomodationSegue" else { return }
    let destinationVC = segue.destination as! accomodationViewController
    destinationVC.navTitle = sender as! String
}

如果代码崩溃,说明你犯了设计错误。

请始终以大写字母 (AccomodationViewController) 命名类。

【讨论】:

  • 我已经尝试过这个答案,但是当我转到下一个 viewController 时,我仍然得到'nil'的输出。这可能是因为 navTitle 被设置为“发件人”而不是“姓名”吗?
  • 如果一切都在 Interface Builder 中正确连接,则代码必须工作。
  • 一切都已正确连接,但仍输出 nil。我不知道为什么,我已经重写了代码,复制并粘贴并稍微编辑了它,但没有任何效果。
  • 您是否检查了 Sweeper 已经问过的内容:是否调用了 prepareForSegue
猜你喜欢
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2018-08-25
  • 2011-04-27
相关资源
最近更新 更多