2014-01-29 5 views
0

это мой первый пост в Stackoverflow. Я новичок в разработке iOS, и я много раз искал и много пробовал (более двух дней), но я действительно придерживаюсь того, что должно быть очень просто сделать.Вложение subview в контроллер навигации

У меня есть основной вид (полноразмерный вид iPhone). Внутри этого представления я хочу иметь более мелкий размер subview (например, 290 x 400). Этот подсмотр должен быть встроен в контроллер навигации. Другими словами: я хочу, чтобы рабочая панель навигации находилась в верхней части этого поднабора.

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

Когда я пытаюсь загрузить диспетчер навигации в одном из контроллеров дочерних представлений, приложение аварийно завершает работу и говорит, что контроллер представления SubView должен иметь контроллер представления контейнера в качестве родителя, но теперь он имеет UINavigationcontroller в качестве родителя.

После того, что я пытался загрузить navigationcontroller непосредственно в подвид, как это:

SubViewVC *subviewcontroller = [[SubVC alloc] initWithNibName:@"SubVC" bundle:nil]; 

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:subviewcontroller]; 

[navController setView:subviewcontroller.view]; 

[self.view addSubview:subviewcontroller.view]; 

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

Я понимаю проблему, но не знаю, как ее решить. Буду признателен за любую оказанную помощь.

ответ

6

Вы делаете несколько вещей неправильно. Во-первых, вам не нужно устанавливать представление контроллера навигации, это уже сделано, создавая его с помощью контроллера корневого представления. Во-вторых, вы должны добавлять представление navController к вашему представлению, а не к виду subviewcontroller. Вы также должны добавлять navController в качестве дочернего элемента и задавать рамку своего представления. Что-то вроде этого:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    SubViewVC *subviewcontroller = [[SubViewVC alloc] initWithNibName:@"SubViewVC" bundle:nil]; 
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:subviewcontroller]; 
    [self addChildViewController:nav]; 
    [nav didMoveToParentViewController:self]; 
    nav.view.frame = CGRectMake(15, 20, 290, 400); 
    [self.view addSubview:nav.view]; 
} 
+0

rdelmar, вы сегодняшний герой. Большое спасибо. Работал как шарм. – Tuslareb

Смежные вопросы