UINavigationBar не отвечает после отмены поиска UITableView в контроллере навигации в панели вкладок во всплывающем окне - PullRequest
0 голосов
/ 05 августа 2010

Хорошо, это странно, и я могу легко воспроизвести его с новым проектом.

Вот настройка:
У меня есть UISplitViewController. В левой части у меня есть UITabBarController. В этом контроллере панели вкладок у меня есть два UINavigationControllers. В контроллерах навигации у меня есть UITableViewControllers. У этих табличных представлений есть строки поиска.

Хорошо, что происходит с этой настройкой: если я нахожусь в портретном режиме и поднимаю это представление во всплывающем окне, а я запускаю поиск в одном из представлений таблицы и отменяю его, панель навигации перестает отвечать на запросы. То есть кнопка «назад», а также кнопка на правой стороне не могут быть нажаты.

Если я делаю то же самое в ландшафтном режиме, чтобы мы не были в поповере, этого не произойдет. Панель навигации остается отзывчивой.

Итак, проблема возникает только в поповере.

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

Мое приложение является универсальным приложением и использует тот же контроллер панели вкладок в интерфейсе iPhone, и оно работает там без этой проблемы.


Как я упоминал выше, я могу легко воспроизвести это в новом проекте. Вот шаги, если вы хотите попробовать это сами:

  • начать новый проект - разделенный вид

  • создать новый класс UITableViewController (я назвал TableViewController)

    • раскомментируйте метод viewDidLoad, а также строку rightBarButtonItem в viewDidLoad (поэтому у нас будет кнопка «Редактировать» на панели навигации)

    • введите любые значения, которые вы хотите вернуть из методов numberOfSectioinsInTableView и numberOfRowsInSection

  • откройте MainWindow.xib и выполните следующие действия:

    • обратите внимание, что вам нужно будет просмотреть xib в среднем «режиме просмотра», чтобы вы могли расширить содержимое пунктов

    • перетащите контроллер панели вкладок в xib, чтобы заменить элемент контроллера навигации

    • перетащите Навигационный контроллер в xib как другой элемент под контроллером панели вкладок

    • удалите два других контроллера вида, которые находятся под контроллером панели вкладок (так, теперь наша панель вкладок имеет только один контроллер навигации)

    • внутри контроллера навигации перетащите контроллер табличного представления и используйте его для замены контроллера представления (контроллера корневого представления)

    • изменить класс нового контроллера табличного представления на класс, созданный выше (для меня TableViewController)

    • дважды щелкните по представлению таблицы под новым контроллером представления таблицы, чтобы открыть его (будет отображаться на панели вкладок внутри контроллера разделения представления)

    • перетащите «Панель поиска и отображение поиска» на представление таблицы

    • сохранить xib

    • запустить проект в симуляторе

      • в портретном режиме нажмите кнопку Root List, чтобы вызвать всплывающее окно

      • обратите внимание, что кнопка «Редактировать» нажимается

      • нажмите в поле поиска - перейдем в режим поиска

      • нажмите кнопку Отмена, чтобы выйти из режима поиска

      • обратите внимание, кнопка Edit больше не работает


Так, кто-нибудь может помочь мне понять, почему это происходит?

Спасибо

Mark

Ответы [ 2 ]

0 голосов
/ 04 января 2011

Я попробовал упомянутую правильную технику BarItem, но она не сработала для меня. Я должен был сделать это (что на самом деле тоже взлом)

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

Это может быть потому, что мой UINavigationBar не объединен с поповером, но я не могу сказать наверняка.

0 голосов
/ 12 августа 2010

Хорошо, получен ответ от службы технической поддержки Apple Developer. Они исследовали это и обнаружили, что это ошибка в UIPopoverController. Он дал мне обходной путь для такого рода работ, но после отмены поиска правая кнопка в навигационной панели в итоге скользит по экрану. Но, по крайней мере, это решает проблему. Он также предложил мне отправить отчет об ошибке в Apple, и я тоже это сделал. Надеюсь, они исправят это в следующей версии SDK.

Вот копия соответствующей части ответа инженера Apple:

Я создал свой собственный проект и окунулся в происходящее, и похоже, что это ошибка в UIPopoverController, где после закрытия UISearchBar что-то блокируется на панели навигации.

Есть обходной путь, который я нашел на данный момент, хотя анимация, которая происходит, не является удивительно оптимальной: - Используйте - searchBarCancelButtonClicked: метод UISearchBarDelegate и добавьте следующее:

self.navigationItem.rightBarButtonItem = nil;
self.navigationItem.rightBarButtonItem = self.editButtonItem;

Как я уже сказал, похоже, что поповер нажимает кнопку на панели навигации, поэтому это может быть не то, что вы ищете.

...