Я работаю над проектом с функцией поиска. У меня 3 контроллера вида, то есть HomeViewController, SearchResultViewController и DetailViewController.Как выполнить функциюSegueWithIdentifier() из динамически созданного UIViewController, свойство раскадровки которого равно nil
На главной странице у меня есть панель поиска (с использованием UISearchController) в пределах navigationBar вместе с некоторым фиктивным контентом. Важно отметить, что я использую отдельный контроллер (в моем случае это SearchResultController), чтобы показать результаты. Этот SearchResultController фактически является подклассом TableViewController, который отображает результат в виде таблицы. Здесь все работает нормально.
Проблема
Теперь, когда я выбрать любую строку из результата (т.е. при SearchResultViewController) Я хочу, чтобы открыть другой контроллер представления (DetailViewController), где я буду показывать подробности об этой выбранной позиции , Это очень простая вещь, но я застрял здесь.
Хорошо, продолжая с этой проблемой я реализованный методом didSelectRowAtIndexPath и от этого я звоню performSegueWithIdentifier, и я получаю сообщение об ошибке «приемник не имеет SEGUE с идентификатором», поскольку раскадровка свойство равно нуль (Упоминается в документации).
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("storyboard property is \(self.storyboard)")
performSegueWithIdentifier(segueIdentifier, sender: indexPath.row)
}
Примечание: segueIdentifier такой же, как это на раскадровке. Я получаю, что свойство раскадровки - это нуль.
Я думаю
Когда я нажимаю на панели поиска, IOS внутренне создает и загружает экземпляр SearchResultController для отображения результата и, следовательно, его раскадровка свойство равно нулю, и из-за того, что я получаю выше ошибки.
Может кто-нибудь дать решение этой проблемы или любой указатель в правильном направлении.
вам не нужно SEGUE в этом случае просто инстанцирует контроллер представления и представить его – Scriptable
вы не можете непосредственно перейти которые не определяют в раскадровку создать экземпляр и просто нажать от навигации или представить его –
@Scriptable Да, просто используется presentViewController(), и он работает нормально. благодаря –