Аксессор UINavigationBar .items не возвращает текущий UINavigationItem - PullRequest
1 голос
/ 28 января 2010

В моей функции UINavigationBar: didPopItem: панель навигации _itemStack содержит n элементов, показанных в отладчике, но функция доступа .items возвращает массив с n-1 элементами, пропуская текущий элемент навигации,это то, что я хочу проверить.backItem возвращает элемент n-2 вместо n-1 и т. Д. Элемент didPopItem является элементом 'n + 1', поэтому он тоже не помогает.

Как получить доступ ктекущий UINavigationItem?

Я использую iPhone 3.0 SDK.

Ответы [ 2 ]

3 голосов
/ 11 июля 2010

Кажется, что свойство "items" будет изменено после возврата RunLoop.Так что попробуй вот так.

-(void)XXX:(UINavigationBar*)nBar {
    UINavigationItem *cItem = [nBar.items objectAtIndex:(nBar.items.count - 1)];
}

-(void)navigationBar:(UINavigationBar *)nBar didPopItem:(UINavigationItem *)item {
    [ self performSelector:@selector(XXX) withObject:nBar afterDelay:0 ];
}
0 голосов
/ 28 января 2010

Обратный вызов didPopItem происходит после удаления элемента, поэтому текущий элемент навигации, вероятно, не тот, который вы ожидаете!

Попробуйте вместо этого поместить свой код в метод делегата shouldPopItem - он вызывается непосредственно перед удалением элемента.

т.е. В вашем стеке 3 предмета, A, B и C.

Когда вы удаляете C, вот что происходит:

  1. shouldPopItem вызывается с элементами являющийся массивом [A, B, C]
  2. C удалено
  3. didPopItem вызывается с массивом элементов [A, B]

Если вы хотите сохранить элемент, который будет удален, сохраните ссылку на него в вашем методе shouldPopItem, чтобы он оставался при вызове метода didPopItem.

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

S

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