Reputation: 7668
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?
Upvotes: 1
Views: 139
Reputation: 31665
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.
Upvotes: 4
Reputation: 14687
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
}
Upvotes: 1