我正在尝试创建自定义segue。它在第一次没有工作。之后我通过创建一个新文件扩展了UIStoryboardSegue并创建了一个名为" perform"的方法。它现在可以在ViewController中不使用prepareSegue。我将之前的代码从preparedSegue复制到"执行"新的UIStoryboardSegue文件中的func。它打印出消息,但代表没有工作。
查看控制器
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
自定义搜索
class CustomSegue: UIStoryboardSegue {
let transitionManager = TransitionManager()
override func perform() {
NSLog("Perform");
let toViewController = self.destinationViewController as UIViewController
toViewController.transitioningDelegate = self.transitionManager
}
}
我在Transition Manager中的每个func中都放置了断点,它们都没有执行和停止。
Segue设置:
问题: TransitioningDelegate无效
完整来源代码:here
答案 0 :(得分:2)
问题是您的perform
实施不会做任何事情:
override func perform() {
let toViewController = self.destinationViewController as UIViewController
toViewController.transitioningDelegate = self.transitionManager
}
您所做的只是创建一个视图控制器,为其提供一个转换委托,然后将其丢弃。你没有进行任何过渡!但这正是一个segue的工作。目前尚不清楚你可能会发生什么。
如果想法是这应该是一个礼物(模态)segue,那么你应该使它成为故事板中的礼物(模态)segue,指定你的自定义segue类,然后,在perform
实施中,致电super
进行实际演示:
override func perform() {
let toViewController = self.destinationViewController as UIViewController
toViewController.transitioningDelegate = self.transitionManager
super.perform() // this will work, _if_ you have specified a present (modal) segue
}
或者,您的perform
可以通过在源视图控制器上调用presentViewController:...
并将目标视图控制器作为参数来执行演示。
但你的 perform
什么也没做。什么都没有。