ECSlidingViewController — обработка обратного вызова

как я могу обработать событие, когда левое меню скрыто. Например: На главном экране у меня есть таблица с элементами. В меню слева у меня есть список категорий, когда я выбираю элемент в меню слева, я присваиваю значение глобальной переменной и возвращаюсь к главному верхнему виду, где я хочу запустить новый запрос и обновление элементов tableView.

Спасибо!


person user3452446    schedule 23.03.2014    source источник


Ответы (2)


Вы должны реализовать следующий метод в контроллере списка категорий.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

Например, мой LeftMenu был в основном UITableviewController (такой же, как в базовой демонстрации ECSlidingViewController), мне нужно было отфильтровать элементы, отображаемые в TopViewController, на основе того, какая строка была нажата в LeftMenu, вот как я это сделал:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
//To stop TopViewController from being reset each time.
ECSlidingSegue *slidingSegue = (ECSlidingSegue *)segue;
slidingSegue.skipSettingTopViewController = YES;

//getting the dataobject associated with the selected table row
NSIndexPath *selectedIndexPath = [_tableView indexPathForSelectedRow];
MyDataObject *dataObject = [_dataArray objectAtIndex:selectedIndexPath.row];

//Digging down into the hiearchy to get to my required view
UITabBarController *tabBarController = (UITabBarController *)[[segue destinationViewController] topViewController];

UINavigationController *navigationController = [[tabBarController viewControllers] objectAtIndex:0];

MyFilteredListViewController *filteredListViewController = (MyFilteredListViewController *)[navigationController topViewController];

//Calling a method on the viewcontroller
[filteredListViewController filterForDataObject:dataObject];

}

Поэтому мне пришлось немного покопаться, чтобы найти контроллер представления, который мне особенно нужен, потому что MyFilteredListViewController находился внутри контроллера навигации, который, в свою очередь, был дочерним элементом TabBarController, который затем был установлен как TopViewController ECSlidingViewController.

Доступ к контроллерам представления должен быть более простым, если они не вложены сложным образом :)

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

Вам нужно будет импортировать «ECSlidingSegue.h» в контроллер списка категорий.

Надеюсь это поможет!

person Shumais Ul Haq    schedule 30.10.2014

Если я правильно понял, что вы хотите сделать, вы можете установить свой topviewcontroller в качестве делегата скользящего ECSlidingViewController

Затем на вашем topviewcontroller вы можете реализовать необязательный

- (id<UIViewControllerAnimatedTransitioning>)slidingViewController:(ECSlidingViewController *)slidingViewController
                               animationControllerForOperation:(ECSlidingViewControllerOperation)operation
                                             topViewController:(UIViewController *)topViewController;

Это хороший момент для выполнения любого пользовательского действия, которое вы хотите, до того, как произойдет анимация topviewcontroller. Если вы не хотите, чтобы пользовательская анимация/переходы происходили, не забудьте вернуть nil после вашего пользовательского кода.

person alasker    schedule 06.02.2016