我正在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时,什么也没发生,我也不知道为什么。
任何帮助将不胜感激!