我的应用程序在没有3Dtouch实现的情况下工作得很好;但添加了3Dtouch后,应用程序继续工作得很好,并且正常旋转,直到使用3D触摸(peek或pop);我有一个tableViewCell处理的peek/pop,预览delegate.The演示文稿将被执行两次,并在控制台中触发此操作:@“警告:尝试呈现已经呈现的内容(空)
发布于 2016-06-02 04:33:54
我也遇到过同样的问题。原因是您在cellForRowAtIndexPath中注册了表格视图单元格。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// myTableViewCell is created or reused here
...
registerForPreviewingWithDelegate(self, sourceView: myTableViewCell)
...
}当表视图重用时,这会导致该单元格注册多次。但是,使用registerForPreviewingWithDelegate多次注册同一视图是不允许的,并且会导致您所描述的警告和旋转问题。
您可以为一个已注册的视图控制器指定多个源视图,但不能将单个视图多次指定为源视图。
解决方案很简单。在第二次注册该视图之前,请检查该视图是否已注册,如果需要,请取消注册。
private var previewingContexts = [MyTableViewCellClass: UIViewControllerPreviewing]()
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// myTableViewCell is created or reused here
...
if let previewingContext = previewingContexts[myTableViewCell] {
unregisterForPreviewingWithContext(previewingContext)
}
let previewingContext = registerForPreviewingWithDelegate(self, sourceView: myTableViewCell)
previewingContexts[myTableViewCell] = previewingContext
...
}您还可以使用这里描述的方法:http://krakendev.io/peek-pop/该方法使用传递给委托的location参数来找出哪个单元格被点击了。通过这种方式,您只需注册整个表视图,而不是每个单元格。这可能是一个更好的解决方案。在我的例子中,这是不可能的,因为我在表视图单元格中嵌套了集合视图,所以它要复杂得多。
https://stackoverflow.com/questions/37249532
复制相似问题