首页 iOS.& Swift Books 通过教程催化剂

2
迁移到拆分视图控制器 由Andy Pereira撰写

拆分视图控制器提供了一种同时管理两个视图控制器的方法。拆分控制器利用iPad的显着更大的屏幕尺寸,使得易于显示主详细信息样式界面。这也使得可以轻松适应某人可能使用的设备的屏幕尺寸。在本章中,您将转换在Go.Nalyst中找到的iPhone“Master-Detail”模式到拆分视图控制器,然后更新UI以利用该视图。

入门

打开本章的入门项目。在活动方案中选择iPad Pro Simulator,然后构建并运行应用程序。在其当前状态下,iPad版本的Gounnalyst要求您在查看详细信息之前选择一个条目。

集成拆分视图控制器

打开 main.storyboard. 并选择这一点 条目表视图控制器 场景。从菜单栏中,选择 编辑器▸嵌入▸导航控制器.

// MARK: - Properties
var entryTableViewController: entrytableViewController.? = nil
@IBSegueAction func entryViewController(coder: NSCoder,
  sender: Any?, segueIdentifier: String?) ->
  UINavigationController? {
    guard let cell = sender as? EntryTableViewCell,
      let indexPath = tableView.indexPath(for: cell),
      let navigationController 
        = UINavigationController(coder: coder),
      let entryTableViewController
        = navigationController.topViewController as?
        entrytableViewController. else { return nil }
    entryTableViewController.entry 
      = dataSource?.itemIdentifier(for: indexPath)
    self.entryTableViewController = entryTableViewController
    return navigationController
}
// MARK: - Split view
extension AppDelegate: UISplitViewControllerDelegate {
  func splitViewController(
    _ splitViewController: UISplitViewController,
    collapseSecondary secondaryViewController: UIViewController,
    onto primaryViewController: UIViewController) -> Bool {
    guard let secondaryNavigationController
      = secondaryViewController as? UINavigationController,
      let entryTableViewController 
        = secondaryNavigationController.topViewController
        as? entrytableViewController. else {
          return false
    }
    if entryTableViewController.entry == nil {
      return true
    }
    return false
  }
}
func application(_ application: UIApplication,
  didFinishLaunchingWithOptions launchOptions:
  [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    if let window = window,
      let splitViewController 
        = window.rootViewController as? UISplitViewController,
      let navigationController 
        = splitViewController.viewControllers.last
        as? UINavigationController {
          navigationController.topViewController?
            .navigationItem.leftBarButtonItem 
            = splitViewController.displayModeButtonItem
          splitViewController.preferredDisplayMode = .allVisible
          splitViewController.delegate = self
    }
    return true
}

更新UI.

即使您有一个工作拆分控制器,您会注意到并非一切都在正常工作。列表中的第一个条目不会自动显示 entrytableViewController.。要获得工作,开放 stailableViewController.swift. and add this code to viewDidLoad():

if let splitViewController = splitViewController,
  let splitNavigationController 
    = splitViewController.viewControllers.last
    as? UINavigationController,
  let topViewController 
    = splitNavigationController.topViewController
    as? entrytableViewController. {
  entryTableViewController = topViewController
}
private func populateMockData() {
  reloadSnapshot(animated: false)
  if let entryTableViewController = entryTableViewController,
    let entry = entries.first,
    entryTableViewController.entry == nil {
    tableView.selectRow(at: IndexPath(row: 0, section: 0),
                        animated: false,
                        scrollPosition: .top)
    entryTableViewController.entry = entry
  }
}

func textViewDidEndEditing(_ textView: UITextView) {
  entry?.log = textView.text
}
if let sender = sender,
  let popoverController =
  actionSheet.popoverPresentationController {
  popoverController.sourceRect = CGRect(x: sender.frame.midX,
                                        y: sender.frame.midY,
                                        width: 0,
                                        height: 0)
  popoverController.sourceView = sender
}
if let popoverController 
  = activityController.popoverPresentationController {
    popoverController.barButtonItem 
      = navigationItem.rightBarButtonItem
}

麦斯科斯分裂观点

在传统的麦克斯应用程序中,拆分视图长期以来一直是以与拆分视图控制器类似的方式呈现UI的标准方法。 Catalyst可以轻松拍摄拆分控制器,并将其转换为在Mac上看起来正确的东西。

splitViewController.primaryBackgroundStyle = .sidebar

关键点

  • 拆分视图控制器可以轻松从同一代码库创建IOS和MacOS应用程序。
  • iPados和MacOS上的鸦片相同地处理。
  • 在MacOS上制作拆分控制器的工作很少有效。

然后去哪儿?

本章将您的iPhone应用程序从一个工作的iPad和MacOS应用程序中获取,在每个平台上感觉到家里。您了解到处理不同平台所需的更改以及为您处理多少催化剂。

有一个技术问题?想报告一个错误吗? 您可以向官方书籍论坛中的书籍作者提出问题和报告错误 这里.

有反馈分享在线阅读体验吗? 如果您有关于UI,UX,突出显示或我们在线阅读器的其他功能的反馈,您可以将其发送到设计团队,其中表格如下所示:

© 2021 Razeware LLC

您可以免费读取,本章的部分显示为 混淆了 文本。解锁这本书,以及我们整个书籍和视频目录,带有Raywenderlich.com的专业订阅。

现在解锁

要突出或记笔记,您需要在订阅中拥有这本书或自行购买。