【问题标题】:Perform segues when I want当我想要的时候执行segues
【发布时间】:2016-10-24 13:05:44
【问题描述】:

晚上,我的 VC 中有 2 场演出。但我只想在我的pickerView 有row.count > 0 时触发这些segues。

这就是我所拥有的:

Override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

if segue.identifier == "searchImages" {

    if pickerView.numberOfRows(inComponent: 0) > 0  {

        let controller = (segue.destination) as! WebViewController
        //replacing " " with "+" for google search queries
        let type: WebViewController.SearchType = .image
        let queryString = String(nameLabel.text!.characters.map {
                    $0 == " " ? "+" : $0
        })
        controller.searchType = type
        controller.queryString = queryString
        print("2")
        }

        }
        if segue.identifier == "searchWiki" {

        if pickerView.numberOfRows(inComponent: 0) > 0  {
            let controller = (segue.destination) as! WebViewController
            //replacing " " with "+" for google search queries
            let type: WebViewController.SearchType = .wiki
            let queryString = String(nameLabel.text!.characters.map {
                    $0 == " " ? "+" : $0
            })
            controller.searchType = type
            controller.queryString = queryString
        }
    }
}

我知道我应该使用:ShouldperformSomething。但我不知道热使用它。 有什么建议吗?

【问题讨论】:

    标签: ios swift segue


    【解决方案1】:

    您应该实现shouldPerformSegue,而不是在您的prepareForSegue 方法中检查pickerView.numberOfRows(inComponent: 0) > 0

    P.S:Swift 3 代码(我认为这就是你想要的)。

    override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
            return pickerView.numberOfRows(inComponent: 0) > 0
    }
    

    现在,prepareForSegue 方法应该类似于:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if segue.identifier == "searchImages" {
                let controller = (segue.destination) as! WebViewController
                //replacing " " with "+" for google search queries
                let type: WebViewController.SearchType = .image
                let queryString = String(nameLabel.text!.characters.map {
                    $0 == " " ? "+" : $0
                })
                controller.searchType = type
                controller.queryString = queryString
                print("2")
    
            }
    
            if segue.identifier == "searchWiki" {
                let controller = (segue.destination) as! WebViewController
                //replacing " " with "+" for google search queries
                let type: WebViewController.SearchType = .wiki
                let queryString = String(nameLabel.text!.characters.map {
                    $0 == " " ? "+" : $0
                })
                controller.searchType = type
            }
        }
    

    希望这会有所帮助。

    【讨论】:

    • 谢谢!所以在执行 segue 之前会自动调用 shouldPerformSegue?
    【解决方案2】:

    您不应该检查 UIStoryboardSegue 的 prepare 委托,而应该检查 shouldPerform:

    override func shouldPerformSegueWithIdentifier(identifier: String!, sender: AnyObject!) -> Bool {
        return pickerView.numberOfRows(inComponent: 0) > 0
    }
    

    【讨论】:

    • 谢谢,您能否详细说明如何在我的代码中实现它?
    • 只需将其添加到您的 ViewController。每当要执行转场时,都会调用此委托方法,这取决于您和您的逻辑是否返回 YES 或 NO 以允许执行转场
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-13
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多