首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >3dtouch尝试演示已在演示的* on *(空)

3dtouch尝试演示已在演示的* on *(空)
EN

Stack Overflow用户
提问于 2016-05-16 16:20:52
回答 1查看 295关注 0票数 0

我的应用程序在没有3Dtouch实现的情况下工作得很好;但添加了3Dtouch后,应用程序继续工作得很好,并且正常旋转,直到使用3D触摸(peek或pop);我有一个tableViewCell处理的peek/pop,预览delegate.The演示文稿将被执行两次,并在控制台中触发此操作:@“警告:尝试呈现已经呈现的内容(空)

EN

回答 1

Stack Overflow用户

发布于 2016-06-02 04:33:54

我也遇到过同样的问题。原因是您在cellForRowAtIndexPath中注册了表格视图单元格。

代码语言:javascript
复制
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    // myTableViewCell is created or reused here
    ...
    registerForPreviewingWithDelegate(self, sourceView: myTableViewCell)
    ...

}

当表视图重用时,这会导致该单元格注册多次。但是,使用registerForPreviewingWithDelegate多次注册同一视图是不允许的,并且会导致您所描述的警告和旋转问题。

请参阅Apple documentation

您可以为一个已注册的视图控制器指定多个源视图,但不能将单个视图多次指定为源视图。

解决方案很简单。在第二次注册该视图之前,请检查该视图是否已注册,如果需要,请取消注册。

代码语言:javascript
复制
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参数来找出哪个单元格被点击了。通过这种方式,您只需注册整个表视图,而不是每个单元格。这可能是一个更好的解决方案。在我的例子中,这是不可能的,因为我在表视图单元格中嵌套了集合视图,所以它要复杂得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37249532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档