Странное поведение при отображении UIPopoverController - PullRequest
2 голосов
/ 15 сентября 2010

В своем приложении для iPad я сохраняю состояние (видимое / не видимое) всплывающего окна.Итак, во время запуска приложения я инициализирую UIPopoverController и приказываю ему показать себя, используя presentPopoverFromBarButtonItem :mittedArrowDirections: animated :.Для первого аргумента (UIBarButtonItem) я использую self.navigationItem.rightBarButtonItem.Тем не менее, всплывающее окно продолжает отображаться в левой части экрана (а не под целевой кнопкой).

После запуска приложения поведение соответствует ожидаемому.Любые предложения, как решить эту проблему?

Для вашей информации, я инициализирую rightBarButtonItem и назначаю его навигационному элементу в методе viewDidLoad и перед тем, как попросить popover представить себя.Я попытался вызвать popover в viewWillAppear и viewDidLoad, но эффект тот же.

Моя лучшая альтернатива - использовать presentPopoverFromRect: inView: allowArrowDirections: animated: вместо этого и «угадать» положение в зависимости от ориентацииустройства.

Обновление: когда я поворачиваю iPad, поповер переходит в правильное положение.Похоже, что позиция barButtonItem определяется только в последнюю минуту, и после того, как я прошу мой поповер представить себя.

1 Ответ

1 голос
/ 28 марта 2011

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

// call from viewDidAppear:
dispatch_async(dispatch_get_main_queue(), ^{
    // call presentPopoverFromBarButtonItem:permittedArrowDirections:animated: here
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...