偷看和弹出的问题

时间:2018-06-22 22:01:08

标签: ios swift

我正在Xcode 9,Swift 4,iOS 11中构建联系人应用程序,但是在尝试将Peek and Pop集成到我的应用程序中时遇到了困难。它的工作方式如下:在UITableView上向用户显示其联系人列表。我希望用户能够使用3D Touch来查看联系人,而不必打开联系人并在希望打开联系人时将其弹出。我在Techotopia上找到了有关使用3D Touch的出色教程,但未能使其正常工作。 Xcode没有给我任何错误,但是当我在iPhone 8上调试应用程序时,它无法正常工作。这是我的代码:

func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
    guard let indexPath = tableView.indexPathForRow(at: location),
        let cell = tableView.cellForRow(at: indexPath) else {
            return nil }

    guard let detailViewController =
        storyboard?.instantiateViewController(
            withIdentifier: "InfoContactController") as?
        InfoContactController else { return nil }

    detailViewController.preferredContentSize =
        CGSize(width: 0.0, height: 600)

    previewingContext.sourceRect = cell.frame

    return detailViewController
}

func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
    show(viewControllerToCommit, sender: self)
}

在Techotopia的教程中,他们使用viewDidLoad中的以下代码注册预览委托:

if traitCollection.forceTouchCapability == .available {
    registerForPreviewing(with: self, sourceView: view)
} else {
    print("3D Touch Not Available")
}

上面的代码在我的控制台中显示“ 3D Touch Not Available”,尽管我显然使用的是支持3D Touch的设备。因此,我在Google上进行了一些研究,发现此代码有效:

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    switch traitCollection.forceTouchCapability {
    case .available:
        print("Available")
    case .unavailable:
        print("Unavailable")
    case .unknown:
        print("Unknown")
    }
}

这是我的代码。它没有给我Xcode错误,但是当我在应用程序中进行3D Touch时,什么也没发生,我也不知道为什么。

任何帮助将不胜感激!

0 个答案:

没有答案