Как я могу подтолкнуть контроллеры представления в подробном представлении образца Apple MultipleDetailViews? - PullRequest
6 голосов
/ 05 мая 2011

Мое намерение состоит в том, чтобы реализовать нечто похожее на собственное приложение настроек iPad. В настройках используется UITableViewController и, как таковой, в подробном представлении можно перейти к подпредставлениям, однако я хочу иметь возможность нажимать на контроллер представления посредством нажатия кнопки в моем подробном представлении.

Итак, я попытался расширить MultipleDetailViews пример приложения:
1) SecondDetailViewController имеет свойство navigationController (только для чтения), установленное на nil ...
2) Итак, я создал новый UINavigationController и использовал его для продвижения своих контроллеров, но это не сработало.

Мой код:

if (!self.myNavigationController) {
    self.myNavigationController = [[UINavigationController alloc] initWithRootViewController:self];
}

FirstDetailViewController *controller = [[FirstDetailViewController alloc] initWithNibName:@"FirstDetailView" bundle:nil];

[[self myNavigationController] pushViewController:controller animated:YES];

[controller release], controller = nil;

Также пробовал только метод init на UINavigationController, но он также не работал.

Я пробую что-то, что невозможно без реализации кастомного UISplitViewController? Был ли я введен в заблуждение примером кода, который для SecondDetailViewController имеет UINavigationBar?

Ответы [ 3 ]

0 голосов
/ 13 апреля 2013

Я искал решение похожей проблемы.В моем случае я хотел, чтобы просмотр таблицы связывался с несколькими подробными видами в зависимости от выбора.Я мог наложить данные на один viewcontroller, но искал лучшее решение.Вот что я сделал.Он простой и работает намного лучше, чем некоторые из сложных и устаревших опций, которые я нашел до сих пор.

Я просто передал ID раскадровки в инспекторе удостоверений контроллеру представления, который я хотел показать в подробном представлении («второй»).) и после didSelectRowAtIndexPath я просто добавил:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 TimeDetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"second"];

[[self.splitViewController.viewControllers objectAtIndex:1] pushViewController:detail animated:YES];

  }

Поэтому, когда кто-то нажимает ячейку в главном представлении, подробное представление выдвигается.

Простой оператор if может переключать отображаемое представление:

   if ([[self.selfRootMenuArray objectAtIndex:indexPath.row] isEqual: @"Second Choice"]) {
        TimeDetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"second"];

[[self.splitViewController.viewControllers objectAtIndex:1] pushViewController:detail animated:YES];

  else if ([[self.selfRootMenuArray objectAtIndex:indexPath.row] isEqual: @"First Choice"]) {
        TimeDetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"first"];

[[self.splitViewController.viewControllers objectAtIndex:1] pushViewController:detail animated:YES];

    };

Вы можете просто использовать кнопки, переключатели или что-то еще вместо представления таблицы, но смысл в том, что, добавив "«Идентификатор раскадровки» в «Identity Inspector»

и просто создание экземпляра контроллера представления путем ссылки на «Идентификатор раскадровки» и последующее его перетаскивание на контроллер разделения представления по индексу 1 (подробности), его просто и быстро

 TimeDetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"second"];

[[self.splitViewController.viewControllers objectAtIndex:1] pushViewController:detail animated:YES];
0 голосов
/ 20 декабря 2018

Вы можете сделать это, используя:

showDetailViewController(viewController, sender: nil)

Документация от Apple об этом здесь .

0 голосов
/ 31 мая 2011

Чтобы иметь возможность сделать это, вы должны поместить viewController в каждый viewController в массиве.Вот так:

[[self.appDelegate.splitViewController.viewControllers objectAtIndex:0] pushViewController:rootLevel1 animated:YES];
[[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] pushViewController:detailLevel1 animated:YES];

Кредит и код: http://kshitizghimire.com.np/uisplitviewcontroller-multipledetailviews-with-navigation-controller/

...