将 tableviewcell 连接到多个视图控制器

Posted

技术标签:

【中文标题】将 tableviewcell 连接到多个视图控制器【英文标题】:connect tableviewcell to multiple view controllers 【发布时间】:2018-02-04 21:01:03 【问题描述】:
import Foundation
import UIKit

class ServiceLines: UIViewController

    @IBOutlet weak var servicesTableView: UITableView!

    var ServiceA: [Service] = []
    var identities = [String]()

    override func viewDidLoad()
        super.viewDidLoad()

        ServiceA = Services()
        identities = ["Service1","Service2","Service3"]

    
    func Services() -> [Service]

        var releaseServices: [Service] = []

        let Service1 = Service(titled: "Test1", description: "Test", image: #imageLiteral(resourceName: "Test"))
        let Service2 = Service(titled: "Test2", description: "Test", image: #imageLiteral(resourceName: "Test"))
        let Service3 = Service(titled: "Test3", description: "Test", image: #imageLiteral(resourceName: "Test"))

        releaseServices.append(Service1)
        releaseServices.append(Service2)
        releaseServices.append(Service3)

        return releaseServices
    


extension ServiceLines: UITableViewDataSource, UITableViewDelegate 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return ServiceA.count
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let ServiceB = ServiceA[indexPath.row]
        let cell = tableView.dequeueReusableCell(withIdentifier:"ServicesTableViewCell") as! ServicesTableViewCell
        cell.setServices(service: ServiceB)

        return cell
    

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
        func prepareForSegue(segue: UIStoryboardSegue, sender: Any) 

            let vcName = identities[indexPath.row]
            let viewController = storyboard?.instantiateViewController(withIdentifier: vcName)
            self.navigationController?.pushViewController(viewController!, animated: true)

        

    


该单元格填充了正确的数据,但是当我在模拟器中单击一个单元格时,它不会移动到上面的相应视图控制器是代码。另外,如何将填充在单元格内的特定数据(例如文本和图像资产)移动到相应的视图控制器(我应该将其添加到该特定视图的每个相应的 swift 文件中还是更简单的方法)?

【问题讨论】:

【参考方案1】:

首先,您需要确保您的 ViewController 被设置为 tableView 的委托。 其次,从 didSelectRow 中删除 prepareForSegue。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    let vcName = identities[indexPath.row]
    let viewController = storyboard?.instantiateViewController(withIdentifier: vcName)
    // Here you can pass the data you need to the new ViewController
    let service = releaseServices[indexPath.row]
    viewController?.service = service 
    // or if you need only the image
    viewController?.serviceImage = service.image
    self.navigationController?.pushViewController(viewController!, animated: true)

我假设您的 viewController 中有一个名为“服务”或“图像”的属性。

【讨论】:

tableview 被设置为放置在其中的 viewController 的委托,我删除了 prepareForSegue,但当我尝试按下服务时它仍然不显示备用 viewController。 按下单元格时是否触发了 tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) ?如果是,self.navigationController 在这个函数调用中是否非 nil? 我怎么知道它是否被解雇了?是的,导航控制器位于标签栏控制器和视图控制器之间,tableview 保存原型单元格。什么是非零??? 使用调试器。在函数内部放置一个断点。如果在您按下单元格时执行在断点处停止,则它被触发。同时,当调试器在断点处停止时,您可以检查属性 self.navigationController?是否为零。或者,如果您在调试时遇到问题,您可以暂时将 print(self.navigationController) 放在函数中。但我建议先了解调试。 当我在 (func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)) 上按下带有断点的单元格时,执行没有停止

以上是关于将 tableviewcell 连接到多个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

将 UITableView 单元连接到单独的视图控制器 [关闭]

使用多个 ViewController、Xcode 将代码连接到情节提要中的 UI

如何将情节提要中的多个按钮连接到单个动作?

如何让一个按钮根据发送的变量连接到多个视图控制器,并发送一个新变量

将初始视图控制器连接到选项卡视图控制器

Table View Controller 每行连接到不同的视图控制器