How to check if a view controller can perform a segue

前端 未结 8 2002
长发绾君心
长发绾君心 2020-12-29 02:10

This might be a very simple question but didn\'t yield any results when searching for it so here it is...

I am trying to work out a way to check if a certain view co

8条回答
  •  误落风尘
    2020-12-29 02:56

    This post has been updated for Swift 4.


    Here is a more correct Swift way to check if a segue exists:

    extension UIViewController {
    func canPerformSegue(withIdentifier id: String) -> Bool {
            guard let segues = self.value(forKey: "storyboardSegueTemplates") as? [NSObject] else { return false }
            return segues.first { $0.value(forKey: "identifier") as? String == id } != nil
        }
    
        /// Performs segue with passed identifier, if self can perform it.
        func performSegueIfPossible(id: String?, sender: AnyObject? = nil) {
            guard let id = id, canPerformSegue(withIdentifier: id) else { return }
            self.performSegue(withIdentifier: id, sender: sender)
        }
    }
    
    // 1
    if canPerformSegue("test") {
        performSegueIfPossible(id: "test") // or with sender: , sender: ...)
    }
    
    // 2
    performSegueIfPossible(id: "test") // or with sender: , sender: ...)
    

提交回复
热议问题