【问题标题】:swift 3 Second TableView segue not showing in Navigation Controllerswift 3 Second TableView segue 未显示在导航控制器中
【发布时间】:2017-12-03 17:50:59
【问题描述】:

编辑 2:在底部添加了一个半解决方案。仍然对完整的解决方案持开放态度

编辑 1:添加图像。

我需要帮助修复第二个和第三个表格视图之间的导航。

我有一个导航控制器和三个表格视图。前两个显示得很好,以便单击第一个 tableview 中的动态 tableview 单元格 > 移动到第二个 tableview。然而,在情节提要中设置的第二个表格视图单元 chevron >(附件:披露指示器)在运行时不会显示,因此单击它不会移动到第三个表格视图。我需要帮助解决这个问题。

在每种情况下,我都按 Ctrl+将单元格链接到情节提要中的下一个 tableview,并准备好在以前的 tableview 控制器中进行 segue。然而,只有一个有效,另一个似乎是孤立的。

如果您可以建议一个清单以确保导航控制器可以跨三个表视图工作,那将很有帮助。不知道要显示什么代码,所以我会发布两个 segues。但这可能不是一个segue问题,所以我不知道。

第一个 tableview 周工作将进入第二个 tableview 联赛。根据点击的内容加载 json 文件。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "toLeagues"
    {
            let leaguesController = segue.destination as! LeaguesViewController
            // pass the selected row
            let selectedRow = self.tableView.indexPath(for: sender as! UITableViewCell)!.row
            if selectedRow == 0
            {
                leaguesController.weekFileName = "sports_week_1"
            }
            else
            {
                leaguesController.weekFileName = "sports_week_2"
            }
    }

但是第二个 tableview 联赛不能参加第三个 tableview 游戏

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "toGames"
    {

        let gamesController = segue.destination as! GamesViewController
        // pass the selected row
        let selectedRow = self.tableView.indexPath(for: sender as! UITableViewCell)!.row

        gamesController.gameName = selectedRow.description
    }
}

编辑 1:添加图片:

在第一个 tableview 中开始很好...

在第二个表格视图中停止,无法移动到第三个表格视图

编辑 2:半解

我找到了一半的解决方案。菜单项现在打开新视图,只有人字形出现在事实之后。 didSelectRowAt 直接添加缺少的披露指示符并转到新的视图控制器。找不到带有 IndexPath 的 viewWillAppear,所以我选择了 didSelectRowAt。至少在单击时有效。只是在初始加载时缺少披露指标。视图运行前如何加载附件类型?

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let cell = tableView.cellForRow(at: indexPath)
        cell?.accessoryType = .disclosureIndicator

        // force menu to move to GamesViewController
        let myGamesView = self.storyboard!.instantiateViewController(withIdentifier: "gamesView")
        self.navigationController?.pushViewController(myGamesView, animated: true)
    }

【问题讨论】:

  • 你可以为LeaguesViewController添加cellForRow

标签: ios swift3 uinavigationcontroller


【解决方案1】:

尝试在cellForRowAt 中设置accessoryType 而不是didSelectRowAt

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "yourIdentifier") as! YourCustomCell

    //Your other code
    cell.accessoryType = .disclosureIndicator
    return cell 
}

【讨论】:

  • 我明白了,所以我可以将 cell.accessoryType 添加到单元格中。这就说得通了。这修复了雪佛龙。谢谢你。仍然需要强制打开另一个视图,但这有效。现在我注意到我的第二个 segue 永远不会将单元格的文本返回到第三个视图。 gamesController.gameName = selectedRow.description 错误。我必须使用 indexPath 来获取单元格然后获取文本。
  • @sf2k 没有得到您的评论,请您更具体地了解您的问题。此外,如果您使用 Segue,则无需推送 ViewController,它将使用 segue 自动推送
  • 已接受答案。我现在的问题是我没有正确使用segue。 gamesController.gameName = 某事
  • @sf2k 你能从情节提要中显示第二个 segue 的 Segue 图像吗,选择第二个 segue 并截取屏幕截图,这会给我们从哪里创建 segue 的想法?是来自单元格还是detaildesclosure?
  • 目前无法发送图像。故事板上的 Segue 从原型单元指示到下一个视图控制器。实际上我发现了一个错误,我没有在故事板 segue 中设置 segue 标识符。现在我只需要清理从一个视图传递到另一个视图的变量。
猜你喜欢
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多