Подтвердить что ты не робот

Проект 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.

Не знаю, как я это сделаю. Любые другие идеи или трюки? Пожалуйста, будьте конкретны, если так! Отношения

4b9b3361

Ответ 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

Я пробовал, и он должен работать нормально. Даже это не контроллер начального представления