Переключение между различными «дочерними» контроллерами просмотра с помощью панели инструментов и ее кнопок

#iphone #objective-c #cocoa-touch

#iPhone #objective-c #cocoa-touch

Вопрос:

У кого-нибудь есть какие-либо советы по этому сценарию.

У пера моего делегата приложения viewcontroller установлен в качестве rootviewcontroller, поэтому он загружает этот контроллер представления при загрузке приложения.

Этот viewcontroller имеет панель инструментов с различными кнопками. Эти кнопки предназначены для переключения между различными контроллерами просмотра.

Я пытался использовать addChildViewController, presentViewController, presentModalViewController ничто не позволяет мне переключаться между контроллерами просмотра, но при этом панель инструментов остается видимой.

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

РЕДАКТИРОВАТЬ: я хочу, чтобы кнопка навигационного контроллера оставалась видимой даже при включении контроллеров, т.Е. Если у меня есть кнопка РЕДАКТИРОВАНИЯ и УДАЛЕНИЯ, я хочу, чтобы те же кнопки оставались на панели инструментов, даже когда я помещаю разные контроллеры в стек

Комментарии:

1. над каким примером вы работаете? Или вы использовали шаблонный проект?

2. вы используете контроллер навигации, панели вкладок или разделенного просмотра?

3. @MaxMacLeod я использую навигационный контроллер

Ответ №1:

Похоже, вы должны использовать панель вкладок.

В качестве альтернативы, вы должны использовать навигационный контроллер с панелью инструментов и контроллерами push / pop view при нажатии кнопок панели инструментов:

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

     //create first button
    buttonOne = [[UIBarButtonItem alloc] initWithTitle:@"EDIT" style:UIBarButtonItemStyleBordered target:self action:@selector(editStuff)];
    [buttons addObject:buttonOne];

    //create second button
    buttonTwo = [[UIBarButtonItem alloc] initWithTitle:@"DELETE" style:UIBarButtonItemStyleBordered target:self action:@selector(deleteStuff)];
    [buttons addObject:buttonTwo];


    // Add buttons to toolbar and toolbar to nav bar.
    [buttonsToolbar setItems:buttons animated:NO];
    [buttons release];

    UIBarButtonItem *twoButtons = [[UIBarButtonItem alloc] initWithCustomView:buttonsToolbar];

    self.navigationItem.leftBarButtonItem = twoButtons;
    [twoButtons release];
 

Комментарии:

1. Спасибо @ade, я попробую использовать навигационный контроллер без анимации, посмотрю, как он выглядит, а затем отмечу правильно.

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

3. self.NavController.navigationBarHidden = ДА;

4. [self.NavigationController setNavigationBarHidden: ДА анимированный: анимированный];

5. Я хочу, чтобы исходные кнопки отображались на панели инструментов см. Мое редактирование

Ответ №2:

addSubview: не позволяет использовать дополнительный контроллер просмотра, так что это не идеально.

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

Нет необходимости использовать панель вкладок или панель навигации, хотя любой из них был бы в некотором роде более простым подходом (но менее очевидным в том, что имеет значение).

Комментарии:

1. В iOS 5 вы определенно можете использовать addSubview для добавления представления другого контроллера представления в микс, но вы должны сопоставить его с вызовом addChildViewController родительского VC, к которому вы добавляете указанный контроллер вложенного представления (там немного лишнее). Таким образом, ваш вторичный контроллер просмотра будет получать все различные вызовы поворота и внешнего вида, которые будут вызывать родительские.

2. Точно — вы не можете украсть представление из другого контроллера представления с помощью addSubview:. Я думаю, что OP получит наилучший опыт, используя один контроллер представления в своем примере, учитывая его комментарий о том, чтобы попробовать разные методы.

Ответ №3:

Используйте UITabBarController в качестве корневого контроллера. Это действует как родительский контейнер для ваших дочерних viewcontrollers, предоставляет панель вкладок и реализует переключение между дочерними представлениями. Ознакомьтесь со ссылкой на класс или руководством по программированию контроллера представления