Perform segues when I want

别说谁变了你拦得住时间么 提交于 2019-11-28 11:08:31

问题


Evening, I have 2 show segues in my VC. But I want to fires these segues only when my pickerView has a row.count > 0.

This is what I have:

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
        }
    }
}

I know I should use: ShouldperformSomething. But I don't know hot use it. Any tips?


回答1:


You should implement shouldPerformSegue instead of checking pickerView.numberOfRows(inComponent: 0) > 0 in your prepareForSegue method.

P.S: Swift 3 Code (I assume that this is what you want).

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

Now, prepareForSegue method should be similar to:

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
        }
    }

Hope this helped.




回答2:


You shouldn't be doing the check on the prepare delegate of the UIStoryboardSegue, but on the shouldPerform:

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


来源:https://stackoverflow.com/questions/40219262/perform-segues-when-i-want

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!