2016-10-24 3 views
1

Вечер, у меня есть 2 шоу segues в моем VC. Но я хочу запускать эти сеансы только тогда, когда у моего 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. Но я не знаю, как это использовать. Любые советы?

ответ

4

Вы должны осуществлять shouldPerformSegue вместо проверки pickerView.numberOfRows(inComponent: 0) > 0 в методе prepareForSegue.

P.S: Swift 3 Code (я предполагаю, что это то, что вы хотите).

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

Надеется, что это помогло.

+0

спасибо! так что shouldPerformSegue автоматически вызывается перед выполнением segue? –

+0

ну, добавьте контрольные точки и проверьте это :) –

1

Вы не должны делать проверку на подготовке делегата UIStoryboardSegue, но на shouldPerform:

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

Спасибо, можете ли вы уточнить, как я могу реализовать его в своем коде? –

+1

Просто добавьте его в свой ViewController. Всякий раз, когда выполняется segue, этот метод делегата будет вызван, и вам решать, и ваша логика возвращает YES или NO, чтобы разрешить выполнение segue или нет. – Lefteris

Смежные вопросы