Segue 使用错误的动画和后退按钮未显示 [关闭]

Posted

技术标签:

【中文标题】Segue 使用错误的动画和后退按钮未显示 [关闭]【英文标题】:Segue using wrong animation and back button not showing up [closed] 【发布时间】:2016-02-18 18:07:00 【问题描述】:

我在我的项目中使用UINavigationController 内的UITabBarController。 在这个UINavigationController 里面有一个UICollectionView。在UICollectionView 中,点击集合中的项目后,应该执行 show segue 以查看某种详细信息页面,您可以从该页面返回或返回具有不同数据的另一个集合 -已应用过滤器。

作为 ios 开发的新手,我很难让事情按我的意愿运行。即使故事板中的所有转场都设置为show,它们也会作为模态动画进行动画处理(从底部而不是右侧进入)。

也不会出现后退按钮。我在属性检查器中为其设置了文本(我已经知道这些必须在“消失”的视图中)并且还为所有导航项添加了标题……仍然没有显示它们的迹象。

这是我的故事板:

这是我使用的prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if segue.identifier == "showService" 
        if let indexPath = self.collectionView?.indexPathsForSelectedItems() 
            let object = serviceData[indexPath.last!.row]
            let controller = (segue.destinationViewController as! UINavigationController).topViewController as! ServiceDetailViewController
            controller.serviceItem = object
            controller.callerItem = self.name
            controller.navigationItem.leftItemsSupplementBackButton = true
        
    

我在我的收藏视图的collectionView:didSelectItemAtIndexPath: 中触发了segue:

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 
    let cell = self.collectionView?.cellForItemAtIndexPath(indexPath)
    performSegueWithIdentifier("showService", sender: cell)

【问题讨论】:

【参考方案1】:

问题是您的 segue 从导航控制器的子节点(“另一个标题”)运行到 导航控制器。这不是您在导航界面中构建推送/显示 segue 的方式。您需要从导航控制器的子节点运行到另一个子节点,即,例如到您的“标题”视图控制器。因此,如果(假设)您的推送/显示转场从“另一个标题”运行到“标题”,那么当触发该转场时,“标题”视图控制器将被推送到与“另一个标题”相同的导航控制器堆栈上" 视图控制器,因此您将在导航栏和后退按钮中更改标题。

【讨论】:

这也意味着你的代码会发生一些变化,当然,因为你的 segue 的目标视图控制器会有所不同。 感谢您的意见!这是否也意味着,我可以将我的所有观点都“植根于”单个UINavigationController 意思和我说的差不多。

以上是关于Segue 使用错误的动画和后退按钮未显示 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

没有显示 segue 显示的快速后退按钮

目标 C:后退按钮 segue 不起作用

在 iOS 设备上使用后退按钮时未触发 CSS 关键帧动画

IOS - 如何使默认的后退按钮调用展开segue

unwind segue vs. popViewController 动画

使用后退按钮展开 segue 时执行代码