UPDATE
Я сделал учебник для этого: Custom Navigation. В видео я использую UISegmentedController, однако используется тот же метод.
Постараюсь и шаг за шагом, как это сделать.
Создайте класс NSObject и назовите его ButtonHandler.
Создать такие методы, как
//create as many as needed
-(IBAction)handleButton1:(id)sender
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"notifyButtonPressed1" object:self];
}
Перетащите NSObject на свой корневой View Controller и установить его класс ButtonHandler
Control + перетаскивание из ваших кнопок в пользовательском нав на объект и выбрать, какой метод они должны использовать.
В вашем viewDidLoad
метод вашего Root View, добавьте это:
//Notify the Root View when the button has been pressed
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeView1:) name:@"notifyButtonPressed1" object:nil];
Добавить как многие из них со своими селекторов, чтобы изменить точку зрения.
Поместите этот код в нижней части Root View Class
-(void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
NSNotificationCenter прослушивает уведомления в приложении для выполнения действий. Они действительно удобны и могут сэкономить много кодировок, однако они не подходят для каждого случая перехода.
Добавить @property (nonatomic, weak) UIViewController * content
в корневой Посмотреть .h файл и в файле .m добавить этот метод под вашим viewDidLoad
//SET THE NEW CONTENT INSIDE THE ROOT VIEW
-(void)setContent:(UIViewController *)content
{
//CHECK FOR EXISTING CONTENT
if(_content)
{
//IF CONTENT EXISTS, REMOVE IT
[_content.view removeFromSuperview];
[_content removeFromParentViewController];
}
//NOW ADD THE NEW CONTENT AND DISPLAY
_content = content;
[self addChildViewController:_content];
[_content didMoveToParentViewController:self];
[self.view addSubview:_content.view];
}
Вам нужно будет создавать свои собственные методы для отображения и установки нового контента, создавая его код или присвоить его.
Это мой метод отображения:
-(void)changeView1: (id) sender
{
//create access to the next view
NSString * storyboardName = @"Main";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
UIViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"View1"];
NSLog(@"Button 1 pressed");
//set the _content of the declared UIViewController to be the assigned view
self.content = vc;
//THIS SETS THE SIZE AND POSITION OF THE NEW CONTENT
self.content.view.frame = CGRectMake(10, 65, 300, 300);
}
Это звучит, как вы, возможно, легче с NSNotificationCenter. Кажется, вам нужно больше, чем один объект, чтобы знать о вашем пользовательском состоянии viewController. NSNotifications также с удовольствием работают по сравнению с написанием отдельных делегатов вплоть до Root VC. Вот об этом [Статья NSHipster] (http://nshipster.com/nsnotification-and-nsnotificationcenter/). – Dare