我一直在尝试创建自定义转换segue,并一直关注在线教程来帮助我。我在没有故事板的情况下以编程方式创建我的应用程序。
我有一个集合视图单元格,在点击时我希望有一个自定义动画过渡。所有当前教程都使用Storyboard segues。大多数教程将在故事板上创建自定义segue,然后使用以下函数的一些变体来调用它们的自定义segue:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let vc = segue.destination as! ViewController
let cell = sender as! PictureCell
sourceCell = cell
vc.picture = cell.picture.image
}
因为我没有使用故事板,我想我必须在didselectitem函数中调用我的动画过渡:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
}
我拥有所有自定义协议,并设置了我的UINaviationDelegate以包含自定义动画过渡:
extension FeedViewController: UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return PopInAndOutAnimator(operation: operation)
}
}
extension FeedViewController: CollectionPushAndPoppable {
var collectionView: UICollectionView? {
return ideasCollectionView
}
}
以下是我所遵循的教程示例:http://www.stefanovettor.com/2015/12/25/uicollectionview-custom-transition-pop-in-and-out/
如何在没有故事板的情况下调用我的自定义segue?
我真的很感激帮助。过去一周我一直试图解决这个问题。
由于
答案 0 :(得分:2)
正如您正确指出的那样,Segues只有在您使用故事板时才可用,因此准备segue不适用于xibs
您已创建并设置UINavigationControllerDelegate
,现在只想将动画启动到其他视图控制器。
因此,您只需要在导航视图控制器上调用push:
let vc = DetailViewController(nibName: "DetailViewController", bundle: nil)
self.navigationController.pushViewController(vc, animated: true)
此代码创建并显示DetailViewController
的实例(重命名为您使用的正确名称)。如果正确设置了导航视图控制器的委托,则将应用自定义动画。