gpt4 book ai didi

swift - 过渡到 ViewController 点击 TableViewCell

转载 作者:行者123 更新时间:2023-11-28 14:45:46 29 4
gpt4 key购买 nike

如何通过点击表格 View 单元格来转换到 View Controller ?我目前的结构是:

我使用 navigation controller 作为我在我的应用程序 atm 中导航的唯一方式。
我使用 struct 类型的 view models 来表示单个单元格。这些 View 模型符合自定义协议(protocol),其中包含一个我称为 cellSelected 的方法。

我的问题是:
如何使用我的 cellSelected 函数通过点击一个单元格来转换到 view controller ?这可能吗?

自定义协议(protocol):

protocol CellRepresentable
{
var reuseIdentier: String { get }

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

View 模型示例:

struct ProfileNameViewModel
{
}

extension ProfileNameViewModel: TextPresentable
{
var text: String
{
return "Name"
}
}

extension ProfileNameViewModel: CellRepresentable
{
var reuseIdentier: String
{
get
{
return ProfileTableViewCell<ProfileNameViewModel>.reuseIdentifier
}
}

func registerCell(tableView: UITableView)
{
tableView.register(ProfileTableViewCell<ProfileNameViewModel>.self, forCellReuseIdentifier: ProfileTableViewCell<ProfileNameViewModel>.reuseIdentifier)
}

func cellInstance(of tableView: UITableView, for indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentier, for: indexPath) as! ProfileTableViewCell<ProfileNameViewModel>
cell.configure(withDelegate: self)

return cell
}

func cellSelected()
{
// ??
}
}

最佳答案

我想您有几个选择,您可以将导航 Controller 的引用传递给 View 模型,或者您可以定义一个在 cellSelected 上执行的闭包。

选项 1:

struct ProfileNameViewModel {

private let navigationController: UINavigationController

init(withNavigationController navigationController: UINavigationController) {
self.navigationController = navigationController
}

func cellSelected() {
navigationController.pushViewController(...)
}
}

选项 2:

struct ProfileNameViewModel {

private let selectedAction: () -> Void

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

func cellSelected() {
selectedAction()
}
}

在你的 View Controller 上:

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

关于swift - 过渡到 ViewController 点击 TableViewCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50276984/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com