Не имеет segue с идентификатором 'searchSegue' через класс файла xib

cyildirim спросил: 28 марта 2018 в 04:51 в: ios

Я использую segue (searchSegue) для подключения экрана поиска (SearchViewController) к странице результатов поиска (PhotoStreamViewController).

SearchViewController - это представление коллекции. Каждая ячейка просмотра коллекции имеет дизайн в Xib-файле. (Класс файла Xib - SearchCategoryRowCell)

В настоящее время, когда я запускал searchSegue через SearchViewController, он отлично работает. Но всякий раз, когда я запускаю один и тот же сеанс через SearchCategoryRowCell, я получаю Has no segue with identifier 'searchSegue'

SearchViewController.swift

 class SearchViewController: UIViewController,UISearchBarDelegate,UICollectionViewDataSource, UICollectionViewDelegateFlowLayout{
    ...
   func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        searchRedirect(keyword: searchBar.text!)
    }    func searchRedirect(keyword:String) {
        performSegue(withIdentifier: "searchSegue", sender:self)
        PhotoStreamViewController.searchString = keyword
        navigationController?.setNavigationBarHidden(false, animated: true)
    }
    ...
  }

2 ответа

Есть решение
Sh_Khan ответил: 28 марта 2018 в 05:04

Этот

 let searchViewcontroller = SearchViewController(nibName: "SearchViewController", bundle: nil)

не является текущим представленным VC, вы должны использовать делегат или объявить self как свойство внутри класса ячейки

class SearchCategoryRowCell: UICollectionViewCell {
  var sear:SearchViewController?}

и установите его внутри cellForItem в SearchViewController

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {   let cell =  collectionView.dequeueReusableCell(withReuseIdentifier: "cellID", for: indexPath) as! cellClassName   cell.sear = self   return cell; }

//

, после чего вы сможете использовать представленный объект

@objc func searchRedirection(_ sender:UIButton) {    print("we")
    print(subCategoryArray[sender.tag].name)
    sear?.searchRedirect(keyword: "otherSearchKeyword")}
cyildirim ответил: 28 марта 2018 в 05:03
Это отличное решение. Это сработало отлично. Вы спасатель!
Sh_Khan ответил: 28 марта 2018 в 05:16
Удачного кодирования :)
matt ответил: 28 марта 2018 в 04:55

Вы прекрасно объяснили причину. Вы говорите:

let searchViewcontroller = SearchViewController(nibName: "SearchViewController", bundle: nil)
searchViewcontroller.searchRedirect(keyword: "otherSearchKeyword")

Итак, searchViewcontroller - совершенно новый контроллер представления, созданный прямо в вашем коде. Таким образом, он не имеет сегментов. Контроллер представления с сегментами - это в раскадровке , который является совершенно другим контроллером представления.