Почему элементы панели инструментов UINavigationController обновляются через 4-5 секунд после остальной части представления? - PullRequest
1 голос
/ 25 января 2012

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

  1. При касании одной из трех кнопок вызывается метод, который изменяет источник данных табличного представления, перезагружает таблицу, а также изменяет названия (и, возможно, количество) кнопок на панели инструментов.(Количество кнопок может быть 0 ~ 3).

  2. Существует также rightBarButtonItem, который выдвигает модальный vc, который при увольнении изменяет источник данных, а также перезагружает таблицу и кнопки.

Проблема: прикосновение к кнопке (# 1) вызывает немедленный эффект: кнопки перерисовываются с новыми заголовками и данные tableView перезагружаются.Но когда модальный vc отклоняется (свойства сеттера таблицы должны вызывать перезагрузку данных перед viewWillAppear таблицы vc), все в порядке, кроме кнопок!На панели инструментов отображается правильное количество элементов UIBarButtonItems, но их названия пусты.У меня есть NSLog внутри метода, который устанавливает свойство toolbarItems, и после того, как в журнале написано "UIBBI array set", появляются кнопки с [пустыми] заголовками, затем через 4-5 секунд появляются заголовки (через много времени после того, как методустановить их вернул).

Нужно ли что-то делать в другом потоке?Нажатие на этот телевизор не вызывает проблем, и метод, описанный в # 1, также не дает таких же пустых, а затем и названных эффектов ... Итак, я в замешательстве.Извините за ДЛИННОЕ объяснение ... пытаюсь быть полным.Но любая помощь будет принята с благодарностью!

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

- (void)updateBestGuessesButtons
{
if (self.resultsArray.count == 0 || self.resultsArray.count == 1 || !self.bestGuesses)     {
    [self.navigationController setToolbarHidden:YES animated:YES];
    return;
}

[self.navigationController setToolbarHidden:NO animated:YES];

NSMutableArray *toolbarItems = [[NSMutableArray alloc] initWithObjects:[[UIBarButtonItem alloc] 
                                                                       initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
                                                                       target:nil 
                                                                        action:nil], nil];
for (NSString *guess in self.bestGuesses) {
    UIBarButtonItem *button = [[UIBarButtonItem alloc] 
                               initWithTitle:guess 
                               style:UIBarButtonItemStyleBordered 
                               target:self 
                               action:@selector(removeWordsWithLetter:)];
    [toolbarItems addObject:button];
}
[toolbarItems addObject:[[UIBarButtonItem alloc] 
                         initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
                         target:nil 
                         action:nil]];

[self setToolbarItems:toolbarItems animated:YES];

} ​​

Ответы [ 2 ]

0 голосов
/ 19 октября 2012

ОК - я решил эту проблему, чтобы переместить создание кнопки в событие viewDidLoad.

0 голосов
/ 25 января 2012

Похоже, вы должны установить заголовок кнопки UIB для всех состояний,

[myButton setTitle:@"Foo" forState:UIControlStateNormal];
[myButton setTitle:@"Foo" forState:UIControlStateHighlighted];
[myButton setTitle:@"Foo" forState:UIControlStateSelected];
// .. and so on
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...