iOS: настройка текста в подвиде пера из представления в приложении UITabBar / UINavigationController - PullRequest
0 голосов
/ 16 мая 2011

У меня проблема с получением текстового значения UISearchDisplay для программной установки при загрузке представления другим представлением, и мой вопрос: я слишком усложнил свою проблему и что-то пропустил, или я на правильном пути мышления.

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

На вкладке 1 имеется UITableViewController, который заполняется списком категорий.

Tab 2 имеет MapView в своем основном виде, но я сделал пользовательское представление UINavigationItem, чтобы поместить различные кнопки и UISearchDisplay в область rightBarButtonitem.

Макет просмотра карты и пользовательский элемент навигации хранятся в том же самом наконечнике, что и два отдельных объекта просмотра. В viewDidLoad () на вкладке 2 я программно инициализирую rightBarButtonItem следующим образом:

UIBarButtonItem *btnItem = [[UIBarButtonItem alloc] initWithCustomView:buttonBar];
self.navigationItem.rightBarButtonItem = btnItem;
[btnItem release];

Все запускается, buttonBar подключен к IBOutlet как searchWhat, и я могу общаться с этим объектом из класса контроллера mapview.

Если пользователь находится на вкладке 1 и нажимает на ячейку, я хочу, чтобы он переключился на вкладку 2 и заполнил searchWhat.text, а затем выполнил код поиска, как если бы кто-то сам набрал в поиске.

У меня проблемы с порядком загрузки и заполнения представления.

Я могу получить доступ ко 2-й вкладке из 1-й без каких-либо проблем и заставить ее появляться с чем-то вроде:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"Quick Category cell tapped at row %d", indexPath.row);    
    self.tabBarController.selectedIndex = 1; // change to the search view controller
    //[self.tabBarController.selectedViewController viewDidAppear:YES];
    UINavigationController *nav = (UINavigationController *)self.tabBarController.selectedViewController;
    SearchViewController *srch = [nav.viewControllers objectAtIndex:0];
    //NSLog(@"%@", [srch description]);
    [srch queueSearchByType:kSearchTypeQuickCategories withData:[catList objectAtIndex:indexPath.row]];
    [srch viewDidAppear:YES];
}

Не беспокойтесь о catList и SearchViewController, они существуют, и этот бит работает для переключения вкладок.

В этом и заключается проблема, если пользователь запускает приложение и выбирает элемент на вкладке 1, появляется вкладка 2, но значения текста для отображения поиска не устанавливаются - поскольку viewDidLoad и viewDidAppear вызываются в другом потоке, поэтому выполнение queueSearchByType: withData: вызывается, когда представление все еще загружается и настраивается.

Если пользователь выбирает вкладку 2 (поэтому инициализирует подпредставление), а затем выбирает вкладку 1 и элемент, он может заполнить текст дисплея поиска.

Я не могу просто изменить порядок вкладок, чтобы tab2 был первым и, следовательно, загружал свои подпредставления в панель навигации, поскольку спецификация проекта - это поиск по категории в первую очередь.

Я что-то упустил очень простой? Что мне нужно сделать, это дождаться полного появления второй вкладки перед вызовом queueSearchByType: withData: - есть ли способ сделать это?

В данный момент я реализовал поиск в очереди, проверил подход поиска в очереди, кажется, это немного затянуто.

1 Ответ

0 голосов
/ 20 мая 2011

Хорошо, я не люблю отвечать на свой собственный вопрос, но похоже, что мои опасения были правильными, в основном, если вы хотите UINavigationItem, который является пользовательским представлением (то есть, чтобы поместить панель поиска и различные другие кнопки на контроллере nav ) и иметь возможность переключаться и заполнять их из другой вкладки на контроллере панели вкладок, затем вам нужно поместить подпредставление в его собственный класс, который является подклассом UIViewController, а затем сделать делегирование вашим другом (которым оно уже является), я Я привел пример на случай, если кому-то понадобится повторить его, который я разместил в своем блоге ЗДЕСЬ.

http://www.jamesrbrindle.com/developer/ios-developer/howto-add-a-custom-uinavigationitem-to-a-uinavigationcontroller-with-delegation.htm

Если кто-то не согласен и считает, что это может быть проще, пожалуйста, дайте мне знать или оцените этот пост

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...