Вопрос по objective-c, ios5, ios – Несколько сегментов из контроллера табличного представления

5

У меня есть небольшое приложение, которое использует несколько макетов разделов для начального представления таблицы. В одном разделе отображаются самые последние тенденции из Twitter, а в другом разделе отображаются самые последние новости из Twitter. Когда я нажимаю на элемент в списке трендов, я перехожу на новый контроллер табличного представления, который отображает самые последние твиты об этой тенденции. В корневом контроллере для раздела историй я наблюдал, чтобы иметь возможность отображать больше информации в другом контроллере представления, который содержит изображения, ссылки и так далее. Проблема в том, что когда я выбираю что-либо в разделе историй, меня подталкивают к контроллеру табличного представления, который настроен для секции трендов. Я назвал каждый segue и у меня есть собственные классы для обоих представлений, к которым я хочу перейти, и я делаю это, чтобы проверить, какой segue вызывается:

<code>-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if([[segue identifier] isEqualToString:@"viewTrendsSearch"]) {

        //get the controller that we are going to segue to
        SearchTrendResultsViewController *strvc = [segue destinationViewController];

        //get the path of the row that we want from the table view
        NSIndexPath *path = [self.tableView indexPathForSelectedRow];

        //here we get the trend object from the array we set up earlier to hold all trends
        Trends *results = [currentTrends objectAtIndex:[path row]];

        //pass the object that was selected in the table view to the destination view
        [strvc setQuery: results];
    }

    if([[segue identifier] isEqualToString:@"storyfullDetails"]) {

        StoriesViewController *svc = [segue destinationViewController];

        NSIndexPath *path = [self.tableView indexPathForSelectedRow];

        Stories *results = [currentStories objectAtIndex:[path row]];

        [svc setStory:results];
    }
}
</code>

Любые предложения о том, как добраться до разных взглядов?

Ваш Ответ

1   ответ
17

чтобы быть уверенным, но это звучит как проблема с тем, что я называю автоматическим, а не ручным переходами и ограничениями для каждого из них.

automatic segue создается в IB путем перетаскивания из ячейки таблицы (прототипа) или другого элемента управления. Хорошая вещь об этом состоит в том, что это, ну, в общем, автоматическое нажатие на элемент управления выполняет переход, и все, что вам нужно сделать в своем коде, это реализоватьprepareForSegue:sender: так что контроллер представления назначения получает правильные данные. Недостатком является то, что любой заданный элемент управления (включая ячейки таблицы-прототипа) может иметь только один исходящий переход (в противном случае раскадровка не будет знать, какие действия выполнять автоматически).

manual segue создается в IB перетаскиванием из источникаview controller, Преимуществом этого является то, что контроллер представления может иметь несколько исходящих сегментов. С другой стороны, они не связаны с настраиваемым элементом управления, поэтому вы должны реализовать логику, которая определяет, что выполнять, когда (и вызываетperformSegueWithIdentifier: чтобы это произошло).

Учитывая эти компромиссы, есть два возможных решения вашей проблемы:

Use multiple prototype table cells -- then each can have its own outgoing automatic segue. You'll need to change your table view controller's tableView:cellForRowAtIndexPath: to check the index path's section number and choose the appropriate identifier for dequeueReusableCellWithIdentifier:, but this might make things more convenient or efficient if your trend and story cells have different content anyway.

Use manual segues. Then your table view controller can implement tableView:didSelectRowAtIndexPath: to call performSegueWithIdentifier: with the appropriate identifier chosen based on the index path's section.

В любом случае, вашprepareForSegue:sender: реализация выглядит нормально.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded swallace

Похожие вопросы