过渡到ViewController挖掘TableViewCell

时间:2018-05-10 16:01:04

标签: swift uitableview

如何通过点击表格视图单元格来转换到视图控制器?我目前的结构是:

我使用navigation controller作为浏览我的app atm的唯一方式。
我使用类型view models的{​​{1}}来表示单个单元格。这些视图模型符合自定义协议,该协议由我调用struct的方法组成。

我的问题是:
如何使用我的cellSelected功能点按单元格,转换为view controller?这可能吗?

自定义协议:

cellSelected

视图模型的示例:

protocol CellRepresentable
{
    var reuseIdentier: String { get }

    func registerCell(tableView: UITableView)
    func cellInstance(of tableView: UITableView, for indexPath: IndexPath) -> UITableViewCell
    func cellSelected()
}

2 个答案:

答案 0 :(得分:1)

我猜你有几个选项,你可以将导航控制器的引用传递给视图模型,或者你可以定义一个在struct ProfileNameViewModel { private let navigationController: UINavigationController init(withNavigationController navigationController: UINavigationController) { self.navigationController = navigationController } func cellSelected() { navigationController.pushViewController(...) } } 上执行的闭包。

选项1:

struct ProfileNameViewModel {

    private let selectedAction: () -> Void

    init(withSelectedAction selectedAction: @escaping () -> Void) {
        self.selectedAction = selectedAction
    }

    func cellSelected() {
        selectedAction()
    }
}

选项2:

let vm = ProfileNameViewModel(withSelectedAction: { [weak self] in
    self?.navigationContoller?.pushViewController(...)
})

并在您的视图控制器上:

UIAccessibility

答案 1 :(得分:0)

1-转到Storyboard,单击viewController并在xcode左侧的Utility Area中,给它一个storyboard标识符。
2-返回您的代码并在cellSelected()

中执行此操作

假设您的viewController被称为MusicListVC

    func cellSelected() {

        if let viewController = storyboard?.instantiateViewController(withIdentifier: "your Identifier") as? MusicListVC
        {

            navigationController?.pushViewController(viewController , animated: true)
        }
}