自定义segue在iOS 9.1中不起作用

时间:2015-11-03 00:50:20

标签: ios objective-c iphone delegates segue

我正在尝试创建自定义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设置:

enter image description here

问题: TransitioningDelegate无效

完整来源代码:here

1 个答案:

答案 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什么也没做。什么都没有。