#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, предоставляет панель вкладок и реализует переключение между дочерними представлениями. Ознакомьтесь со ссылкой на класс или руководством по программированию контроллера представления