Проект SWRevealViewController в iOS
Примечание. Проблема решена.
Вот история. Я использую RevealViewController в своем проекте. Я также скрываю навигационные панели:
[self.navigationController setNavigationBarHidden];
Мой проект можно увидеть на рисунке ниже и menuButton "реализован в tabBarViewController.
![введите описание изображения здесь]()
Так как navigationBar скрыт из-за моего интерфейса, все tabViews (HomeViewController) не будут показывать menuButton и navigationBar, как предполагалось. Я также не использую panGestureRecognizer для запуска меню.
Это означает, что у меня есть проблема с запуском меню с помощью обычной кнопки в HomeViewController. Событие menuButton помещается в tabBarViewController.m:
_menuButton.target = self.revealViewController;
_menuButton.action = @selector(revealToggle:);
Поэтому я попытался вызвать метод из HomeViewController, чтобы запустить кнопку в tabBarViewController следующим образом:
HomeViewController.m
- (IBAction) onMenuClicked: (id)sender{
tabBar = [[tabBarViewController alloc] init];
[tabBar setupMenu]:
}
tabBarViewController.m
-(void) setupMenu{
[_realMenuButton sendActionForControlEvents:UIControlEventTouchUpInside];
[_realMenuButton addTarget:self.revealViewController action:@selector(revealToggle:) UIControlEventTouchUpInside];
}
В этом примере я попытался создать realMenuButton и обычный UIButton. Ive также попытался использовать UIBarButtonItem только для запуска @selector (highlightToggle:). Но ничего не происходит в приложении, когда я пытаюсь запустить кнопку из HomeViewController.
Не знаю, как я это сделаю. Любые другие идеи или трюки? Пожалуйста, будьте конкретны, если так! Отношения
Ответы
Ответ 1
Да, он все равно будет работать.
SWRevealViewController - это всего лишь подкласс UIViewController, поэтому вы можете использовать его в любой точке приложения:
- Вызов
presentViewController:animated
в какой-то момент.
- Используя его в стеке навигации и т.д.
Обратите внимание, что вы можете добавлять жесты от SWRevealViewController
к своим контроллерам представления содержимого, что изменит поведение, используемое в контроллере просмотра навигации, но это следует ожидать, и вы все еще имеете полный контроль над его поведением.
Edit
Структура пользовательского интерфейса вашего приложения все еще не ясна для меня - похоже, вы пытаетесь вызвать revealToggle
в экземпляре SWRevealViewController
, когда VC в представлении infact HomeViewController? Как это будет работать, когда SWVC даже не рассматривается?
Мое лучшее предположение заключается в том, что ваша структура пользовательского интерфейса должна быть следующей:
TabBarController --- > (root) UINavigationController --- > (root) SWRevealViewController.
Затем на вашем SWRevealViewController установите HomeViewController в качестве контроллера переднего вида, а TableViewController - как правый, так и левый контроллер.
Ответ 2
Вы имеете в виду это?
![контроллер панели с кнопкой меню?]()
можно. вы можете установить кнопку меню в вашем tabBarController.m, например:
UIBarButtonItem *menu = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"menu.png"] style:UIBarButtonItemStylePlain target:revealController action:@selector(revealToggle:)];
self.navigationItem.leftBarButtonItem = menu;
self.delegate = self;
Для меня мой первоначальный контроллер представления - это экран входа (очевидно, мне не нужно раскрывать какой-либо VC здесь...). затем, когда пользователь нажимает кнопку входа в систему,
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:yourRootVC];
LeftMenuViewController *leftMenuVC = [[LeftMenuViewController alloc]init];
SWRevealViewController *revealController = [[SWRevealViewController alloc]initWithRearViewController:leftMenuVC frontViewController:nav];
revealController.delegate = self;
[self presentViewController:revealController animated:YES completion:nil];
Ответ 3
Я пробовал, и он должен работать нормально. Даже это не контроллер начального представления