#iphone #objective-c #ipad
#iPhone #objective-c #iPad
Вопрос:
У меня есть UITabBarController с тремя вкладками, каждая из которых является UIViewController с UITableView. У меня есть кнопка выхода, и я хочу очистить UITableView во всех этих UIViewController, поэтому с одного из UIViewController я сделал:
NSArray * viewControllers = ((UITabBarController *)self.parentViewController).viewControllers;
AllGroupsViewController * agvc = [viewControllers objectAtIndex:1];
[agvc.groups removeAllObjects];
[agvc.table reloadData];
SearchViewController * svc = [viewControllers objectAtIndex:2];
[svc.results removeAllObjects];
[svc.table reloadData];
Однако, похоже, что NSArray ViewControllers пуст. Есть ли другой способ сбросить все снова при выходе из системы?
Проблема с моим текущим приложением заключается в том, что когда у меня есть пользователь, который вошел в систему и использует приложение. Он выходит из системы, и новый пользователь входит в систему, этот новый пользователь все еще может видеть историю предыдущих пользователей в UITableView.. вот почему я хочу очистить это при выходе пользователя из системы через три UIViewController в UITabBarController
Ответ №1:
Не могли бы вы проверить значение self.parentViewController? Я не уверен, возвращает ли он контроллер панели вкладок.
Вместо self.parentViewController.ViewControllers выполните
self.tabBarController.viewControllers
Комментарии:
1. Я думаю, это должно сработать .. теперь проблема в том, что три UIViewController на панели вкладок находятся внутри UINavigationController.. итак, как мне получить доступ к UIViewController UINavigationController
2. UINavigationController имеет два свойства, которые могут вам помочь. RootViewController и visibleViewController. visibleViewController выдаст вам тот, который отображается на экране, а RootViewController — самый нижний. Вот ссылка на документацию UINavigationController. developer.apple.com/library/ios/#documentation/uikit/reference /…
3. проверьте, указав этот [tabBarViewController isKindOfClass:[Класс UINavigationController]]
Ответ №2:
Определите этот массив в AppDelegate и во время запуска приложения создайте TabController с табличным представлением с помощью кода.
Теперь с помощью кнопки выхода установите для списка данных или источника tableview значение nil;
Комментарии:
1. при выходе из системы я просто представляю modalView страницы входа.. Я не уверен, как это может быть выполнено в делегате приложения
2. Знаете ли вы, как реализовать методы делегирования? Вы можете определить метод делегирования в вашем LoginViewController и реализовать в вашем корневом контроллере просмотра, который после выполнения вызовов выхода из системы до отображения loginscreen очищает источник данных табличного представления до нуля;
3. Да, у меня действительно есть несколько делегатов.. Изначально я собирался использовать этот метод. но поскольку кнопка выхода фактически отображается с одного из UIViewController, который находится в UITabBarController, поэтому делегат отправляется туда вместо RootViewController
4. Вы можете определить метод в делегате приложения, такой как ClearContents, и, получив доступ к AppDelegate, вы можете вызвать этот метод с помощью любой кнопки нажатия.