【问题标题】:UISplitViewController, reuse DetailViewController (Swift)UISplitViewController,重用 DetailViewController (Swift)
【发布时间】:2018-03-28 01:01:56
【问题描述】:

设置: 在 Xcode 中创建样板 iOS Master-Detail 应用程序并运行它。每次单击主条目时,它都会重新创建 detailVC 并将其配置为显示新数据。

前提:这通常是我想要的,但有时它只是更改单个标签中的文本。重用现有的 DetailVC 不是更有意义吗? (至少在这种情况下)

那么最好的方法是什么?

思考:当我查看样板代码时,我看到 MasterVC 为 detailVC 创建了类作用域变量。

var detailViewController: DetailViewController? = nil

它在viewDidLoad 中设置了这个值,但它从不将它用于任何事情。嗯?在prepare(for:sender:) 我们得到这个代码

let controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController

创建DetailViewController 的新实例。如果您在创建后添加断点并将其与类 var detailViewController 进行比较,您会发现它们是不同的。

UIStoryboardSegue 正在创建我的新 DetailViewController,可以通过查看文档轻松确认。

您不直接创建 segue 对象。相反,故事板 运行时在必须在两个视图之间执行转场时创建它们 控制器。

我可以删除行选择上的 segue 并在我的 detailVC 上手动调用该方法,这可能是最简单的,但 segue 在 IB 中是如此纯粹和可视化。我可能可以创建一个自定义转场。我还能做什么,是否有明确的“最佳”方式?

【问题讨论】:

    标签: ios swift uisplitviewcontroller


    【解决方案1】:

    如果其他人有这个问题,这是我的解决方案,直到有人想出更好的东西。

    转到 Interface Builder 并删除从主 tableview 到 detailVC 的 showDetail segue。然后进入MasterViewController类,去掉prepare(for:sender:)函数。

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showDetail" {
            if let indexPath = tableView.indexPathForSelectedRow {
                let object = objects[indexPath.row] as! NSDate
                let controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController
                controller.detailItem = object
                controller.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
                controller.navigationItem.leftItemsSupplementBackButton = true
            }
        }
    }
    

    在表格视图区域创建一个新函数(这个新函数是UITableViewDelegate的一部分)

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
         detailViewController?.detailItem = object
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多