我有TableViewController
与UIViewController
所在的WKWebView
保持联系。每个TableView单元格都指向特定的本地html文件,然后将其加载到WebView中。
我可以简单地在Attributes Inspector中检查
Peek & Pop
-Preview & Commit Segues
,但是预览将始终显示相同的html文件 ,而不是每个选定的表格单元格都不同。
实施3D Touch的正确方法是什么,或者如何以某种方式准备html内容以在第一个TableViewController
中进行预览?
.xcodeproj 在我的github上。按需提供更多信息。
感谢帮助!
答案 0 :(得分:1)
好吧,我看到了您的代码,您没有实现3D触摸,首先需要检查您的viewDidLoad()
方法中3DTouch是否可用:
if( UIApplication.shared.keyWindow?.traitCollection.forceTouchCapability == .available{
registerForPreviewing(with: self, sourceView: view)
}
然后,实现Preview UIViewControllerPreviewingDelegate的委托,您正在谈论使用3dtouch弹出视图控制器,在委托中实现此功能
extension:YourViewController:UIViewControllerPreviewingDelegate{
func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {
//Here's where you commit (pop)
//You are trying to show into tableview, the next code makes this
//For TableView
guard let indexPath = tableView?.indexPathForItem(at:location) else {
return nil }
guard let cell2 = tableview.cellForRow(at: indexPath) else { return nil }
guard let popVC = storyboard?.instantiateViewController(withIdentifier: "popVC") as? YourClassViewControllerToShow else { return nil }
let html = htmls[indexPath.row]
popVC.html = html
show(popVC, sender: self)
}
}
然后我将代码从Detail.swift viewDidLoads()
切换为viewWillAppear()
content.uiDelegate = self
content.navigationDelegate = self
let url = Bundle.main.url(forResource: result?.id, withExtension: "html", subdirectory: "Library")!
let request = URLRequest(url: url)
content.loadFileURL(url, allowingReadAccessTo: url)
content.load(request)
最后,您要确保Web视图始终在出现时刷新。
答案 1 :(得分:0)
偷看时没有选定的单元格,因此您不能只问表格有关选定单元格的信息。相反,您必须处理sender
参数,即UITableViewCell
:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "transporter" {
guard
let cell = sender as? UITableViewCell,
let path = table.indexPath(for: cell)
else {
return
}
let selected = filtering() ? filter[path.section].rows[path.row] : list[path.section].rows[path.row]
let controller = (segue.destination as! Detail)
controller.result = selected
}
}