Попытка инициировать UINavigationController из подпредставления в UISegmentControl

У меня есть UISegmentControl в одном ViewController, куда я встроил NavigationController для навигации. В этом UISegmentControl у меня есть три 3 сегмента, в которых я переключаюсь между тремя UITableViewController. Эти UITableViewControllers отображаются в подпредставлении при переключении с одного сегмента на другой. Что я хочу сделать, так это когда пользователь нажимает на ячейку, я хочу показать DetailViewController для того же самого в этом представлении.

Вот код для переключения UISegmentControl -

-(IBAction)valueChanged:(id)sender{

 segmentControl=(UISegmentedControl*)sender;


 if (segmentControl.selectedSegmentIndex==1) {

 firstView = [self.storyboard   instantiateViewControllerWithIdentifier:@"FirstTopViewController"];

    [self.view addSubview:firstView.view];

    NSLog(@"1");
}
}

В FirstTopViewController.m -

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


DetailViewController *detailView = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];

FirstViewController *firstView = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];

detailView.detail = [self.jobsArrayFromAFNetworking objectAtIndex:indexPath.row];

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:firstView];

[self.view addSubview:nav.view];

[nav pushViewController:jobDetailView animated:YES];

[tableView deselectRowAtIndexPath:indexPath animated:YES];

}

Появляется UINavigationController, но в той же части, что и UITableViewController, и вылетает, как только я пытаюсь прокрутить или коснуться любого сегмента. Как я могу правильно настроить навигацию? Любая помощь будет оценена по достоинству.


person Monis Manzoor    schedule 19.07.2013    source источник
comment
Не могли бы вы опубликовать полученное сообщение об ошибке?   -  person Simon Germain    schedule 20.07.2013
comment
lldb - это то, что я получаю синим цветом   -  person Monis Manzoor    schedule 20.07.2013


Ответы (1)


Вы почти получили это, вот что, я думаю, вам нужно сделать:

В вашем valueChanged методе вы настраиваете UINavigationController и его корневой viewController (firstViewController). Вот так:

FirstViewController *firstView = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:firstView];

[self.view addSubview:nav.view];

А затем в didSelectRowAtIndexPath сделайте что-нибудь вроде этого:

DetailViewController *detailView = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];

[self.navigationController pushViewController:detailView]

Есть смысл?

Изменить: Дело в том, что сначала объедините navController и firstViewController (после изменения значения сегментированного элемента управления), а затем, после выбора ячейки, создайте и вставьте detailViewController в существующий navController.

person Alfie Hanssen    schedule 19.07.2013
comment
Спасибо за ответ. Проблема в том, что у меня уже есть UINavigationController, встроенный в раскадровку, и там у меня есть UISegmentControl. Я не хочу, чтобы представление в подпредставлении использовалось для навигации. Я хочу, чтобы он использовал тот же self.navigationController. Любая идея? - person Monis Manzoor; 20.07.2013
comment
Хм, я не уверен, что это сработает / это лучший подход. Похоже, что сегментированный элемент управления управляет несколькими UIViewController, действуя как UITabBarController. Лучше всего разделить два типа управления UIViewController (иерархия, подобная TabBarController и линейная иерархия push / pop), разделив их фактически на два контроллера навигации, каждый из которых управляет отдельной иерархией представлений. Я думаю, что то, что я предлагаю выше, является лучшим подходом, если я чего-то не понимаю в вашей настройке. - person Alfie Hanssen; 23.07.2013