【问题标题】:How can I segue based on which cell was tapped in UITableViewCell?如何根据在 UITableViewCell 中点击的单元格进行判断?
【发布时间】:2020-01-29 18:56:51
【问题描述】:

我有一个视图控制器,其中嵌入了一个表格视图,尽管它始终是相同的十个单元格,但我将其设置为动态的,因为您无法在 UIViewController 中制作静态表格视图单元格。我的问题是,在prepare(for:) 中,我如何根据被点击的单元格选择视图控制器?每个单元都应该导航到一个完全不同的 VC,但我认为有十个 segue 是一团糟。

有没有更好的方法?

【问题讨论】:

  • 是的,这会变得更加混乱,但是如果您想使用 segue ,则可以使用 segue 来区分它们。标识符
  • 我不想使用这么多的segues。我可以在didSelectRow(at:) 做点什么吗,可能基于用户点击的 indexPath,说哪个 vc?
  • 你不能在 UIViewController 中制作静态表格视图单元格。为什么不呢?
  • 我认为您可以使用容器视图,但我认为这对我的问题没有帮助,不确定。
  • 其实这是一个反问。当然,您可以在 UIViewController 中嵌入带有静态单元格的 UITableView。

标签: ios swift xcode uitableview


【解决方案1】:

您可以实现UITableViewDelegate 协议来实际检测被点击的单元格:

extension MyOriginViewController {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        // I'm assuming you have only 1 section
        switch indexPath.row {
            case 0:
                // Instantiate the VC
                let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewControllerIdentifier")
                // Present the view controller, I'm using a UINavigationController for that
                navigationController?.push(vc, animated: true)
            case 1:
                // Another VC and push or present modally
                let vc = ...
                self.present(vc, animated: true, completion: nil)
            default:
                // Default case (unconsidered index)
                print("Do something else")
        }
    }
}

如果你有这个:

你可以这样做:

let vc = storyboard?.instantiateViewController(withIdentifier: "MyNavController")
self.navigationController?.present(vc, animated: true, completion: nil)

【讨论】:

  • 这可行,但有一个问题。我正在导航的屏幕以模态方式呈现。如果我像在 case0 中那样推送,则需要全屏,当我像在 case1 中那样呈现时,导航栏会被隐藏。
  • 您只能在UINavigationController 上使用push。如果您需要模态呈现,请使用present。您在需要覆盖的视图控制器之上以模态方式呈现。如果您出现在导航控制器上,则导航栏将被隐藏。
  • 所以没有办法让模态视图有一个可以看到的导航项?
  • 是的,您需要实例化 UINavigationController 并呈现它而不是子视图控制器。在您的故事板中,您可以将标识符设置为导航控制器并使用它。
  • 这是我的代码。首先,我在故事板中的导航控制器上设置 ID,然后添加:navigationController?.present(allergyTableViewController, animated: true, completion: nil)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
相关资源
最近更新 更多