我在使用自定义转场时遇到了问题。我有两个 tableviews,我试图从中来回切换。当我单击 tableview1 中的单元格时,它应该将我带到 tableview2。我在 tableview2 上有一个按钮连接到 Storyboard的导出。从那里它应该带我回到 tableview1 但每当我按下按钮时,应用程序就会崩溃并出现 BAD_ACCESS 错误。
这是我的自定义转场类:
class TableViewSegue: UIStoryboardSegue {
override func perform() {
scale()
}
func scale () {
let toViewcontroller = self.destination
let fromViewcontroller = self.source
let containerView = fromViewcontroller.view.superview
let originalCenter = fromViewcontroller.view.center
toViewcontroller.view.transform = CGAffineTransform(scaleX: 0.05, y: 0.05)
toViewcontroller.view.center = originalCenter
containerView?.addSubview(toViewcontroller.view)
UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseInOut, animations: {
toViewcontroller.view.transform = CGAffineTransform.identity
}, completion: { success in
fromViewcontroller.present(toViewcontroller, animated: false, completion: nil) //The application crashes and highlights this line as the error.
})
}
}
我已经在我的 tableViewController1 中实现了这个方法:
@IBAction func prepareForUnwind(segue: UIStoryboardSegue) {
}
不确定为什么 tableview2 没有关闭。
编辑:问题与需要导航 Controller 有关。
最佳答案
问题在于,每次执行 Segue 时,您都会呈现
toViewcontroller
。因此,应用将显示 table2 覆盖 table1,然后再次尝试在展开时显示 table1 覆盖 table2。
修改您的自定义转场以检查 - 本质上 - 您要去哪个方向:
class TableViewSegue: UIStoryboardSegue {
override func perform() {
scale()
}
func scale () {
let toViewcontroller = self.destination
let fromViewcontroller = self.source
let containerView = fromViewcontroller.view.superview
let originalCenter = fromViewcontroller.view.center
toViewcontroller.view.transform = CGAffineTransform(scaleX: 0.05, y: 0.05)
toViewcontroller.view.center = originalCenter
containerView?.addSubview(toViewcontroller.view)
let fromP = fromViewcontroller.presentingViewController
UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseInOut, animations: {
toViewcontroller.view.transform = CGAffineTransform.identity
}, completion: { success in
// if nil, we are presenting a new VC
if fromP == nil {
fromViewcontroller.present(toViewcontroller, animated: false, completion: nil)
} else {
fromViewcontroller.dismiss(animated: false, completion: nil)
}
})
}
}
注意:这是假设:
- 您没有尝试在
UINavigationController
中推送/弹出...您需要添加一些其他检查来处理该问题。 - 您只会进入一级,也就是说,您不会演示、演示、演示等等,然后然后尝试放松。
关于ios - 使用自定义 Segue 快速切换到和从 Table ViewController 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44830044/