如何从 UITableView 推送到新的 viewController?

Posted

技术标签:

【中文标题】如何从 UITableView 推送到新的 viewController?【英文标题】:How to push to a new viewController from UITableView? 【发布时间】:2020-07-21 11:11:56 【问题描述】:

有人可以帮我告诉我哪里出错了吗?我正在尝试从表格视图推送到新的视图控制器,但它什么也没做,它在控制台中打印,因此它正在注册但它没有推送。

enter image description here

extension HostedVC: UITableViewDataSource 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return hostItems.count
    
           
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: "hostedCell", for: indexPath) as! HostedTableViewCell
        let post = hostItems[indexPath.row]
        cell.eventNameLable.text = post.eventName
        cell.eventNameLable.textColor = UIColor(red: 0.42, green: 0.33, blue: 0.56, alpha: 1.00)
        cell.dateLable.text = post.startDate
        cell.dateLable.textColor = UIColor.init(red: 61/255, green: 75/255, blue: 99/255, alpha: 1)
        cell.backgroundColor = UIColor.white
        cell.logo.image = UIImage(named: "networkingIMG")
        let backgroundView = UIView()
        backgroundView.backgroundColor = UIColor(red: 0.73, green: 0.73, blue: 0.73, alpha: 1.00)
        cell.selectedBackgroundView = backgroundView
        cell.layer.masksToBounds = true
        return cell
    
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
        return 80
    
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
        let iP = hostItems[indexPath.row]
        print(iP.eventName)
        UserDefaults.standard.set(iP.id, forKey: "SelectedId")
        let vc = HistoryCellPageVC(event: iP)
        hostedVC?.navigationController?.pushViewController(vc, animated: true)
        tableView.deselectRow(at: indexPath, animated: true)
    
    
    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool 
        return true
    

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) 
        if (editingStyle == .delete) 
            // handle delete (by removing the data from your array and updating the tableview)
            hostItems.remove(at: indexPath.row)
                tableView.deleteRows(at: [indexPath], with: .fade)
             else if editingStyle == .insert 
        
    
    
    func openEvent(_ hostItems: Hosted) 
        let vc = HistoryCellPageVC(event: hostItems)
        navigationController?.pushViewController(vc, animated: true)
    

【问题讨论】:

【参考方案1】:

我认为您忘记添加 UITableViewDelegate,这就是 didSelectRowAt 无法运行的原因。

只需更改 extension HostedVC: UITableViewDataSource

extension HostedVC: UITableViewDataSource, UITableViewDelegate

顺便说一句,你不需要打电话给tableView.deselectRow(at: indexPath, animated: true)

【讨论】:

以上是关于如何从 UITableView 推送到新的 viewController?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Json 数据推送到 UITableView 中的标签?

将 UITableView 推送到 UITableView

UITableViewController 没有将视图推送到堆栈上

如何将新数据从实时数据库推送到 Cloud Firestore?

以编程方式从 collectionView Cell didSelectItemAt 推送到新的 ViewController - swift

postgresql 函数 - 如何将新的 json 对象推送到 json 数组?