Добавить анимированную верхнюю панель в UIWebView

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

Кто-нибудь знает, как к этому подойти? Есть какой-нибудь простой способ сделать это?

ОБНОВЛЕНИЕ:
Мне кажется, я не совсем понял вопрос, поэтому вот некоторые пояснения:
1. Приложения - это стандартное приложение, в котором один из потоков открывает UIWebView, загружающий веб-страницу
2 . Я ищу панель, которая будет скользить вниз по верхней части веб-страницы (загруженной в UIWebView) и должна помочь пользователю преодолеть сценарий, при котором веб-страница не загружается по какой-либо причине
3. Панель должен сдерживать операции (просто закройте UIWebView) и обновите (перезагрузите UIWebView).

Надеюсь, это помогло.

Спасибо, Шимикс


person Shimix    schedule 11.04.2011    source источник
comment
На самом деле я работаю над чем-то вроде этого. Буду рад поделиться. Свяжитесь со мной, если хотите.   -  person Moshe    schedule 11.04.2011
comment
Спасибо, Моше! Мы свяжемся с вами в ближайшее время ...   -  person Shimix    schedule 11.04.2011
comment
Вы можете найти меня в Meta Tavern, или мои контактные данные есть на моем веб-сайте, но для этого нужно копать там.   -  person Moshe    schedule 11.04.2011


Ответы (3)


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

  • Ваша адресная строка должна быть слева navigationItem.
  • Строка поиска - это строка navigationItem.
  • Вы должны анимировать кнопку отмены, когда начинаете / заканчиваете редактирование в поле URL.
  • Safari Mobile использует свойство Prompt объекта navigationBar для отображения заголовков веб-страниц.
  • Чтобы анимировать ширину полос поиска / URL, используйте анимацию UIView, когда панель выбрана.
person Moshe    schedule 11.04.2011

Довольно просто добавить UIToolbar над веб-представлением с помощью UIBarButtonItems, которые вызывают методы обновления, возврата и пересылки веб-представления. Вы также можете добавить методы webviewdelegate в свой контроллер представления, чтобы определять, когда страница завершила загрузку, и скрывать / отображать панель инструментов таким образом.

Если вы хотите, чтобы элементы управления обновлением и навигацией отображались как часть html-содержимого самого веб-представления, это немного сложнее, но возможно. Вы можете использовать метод делегата shouldLoadRequest веб-представления, чтобы обнаружить, что эти кнопки были нажаты, а затем выполнить соответствующее действие в вашем контроллере представления. Скрытие и отображение панели навигации должно выполняться с помощью javascript.

person CharlieMezak    schedule 11.04.2011
comment
Спасибо, но я не уверен, что размещение панели над страницей поможет мне в этом случае. Кроме того, кнопка "Назад" должна просто закрыть UIWebView, а кнопка обновления должна перезагрузить UIWebView. Что вы думаете? - person Shimix; 11.04.2011
comment
Если вы используете методы UIWebViewDelegate, вы можете перехватывать запросы, сделанные в веб-просмотре. Итак, на панели вашего веб-контента сделайте ссылку на изображение кнопки возврата с помощью href = webview_go_back или что-то в этом роде, затем в методе делегата webViewShouldStartRequest проверьте наличие webview_go_back в URL-адресе запроса, и вы сможете определить, когда пользователь нажал кнопку "Назад" в веб-просмотре. Затем делайте все, что хотите, закройте веб-просмотр, что угодно. Имеет ли это смысл? - person CharlieMezak; 12.04.2011
comment
Да, и я фактически реализовал кнопку «Назад» на веб-странице, чтобы указать на специальный URL-адрес и обработать его с помощью метода делегата. Но что произойдет, если сама веб-страница вообще не загрузится? В этом случае кнопка возврата на веб-странице не отображается ... Как пользователь может вернуться в приложение? - person Shimix; 13.04.2011
comment
есть метод делегата веб-просмотра, чтобы определить, когда страница не загружается (didFailLoadWithError), который вы можете использовать, чтобы обнаружить это и вернуться в приложение. - person CharlieMezak; 13.04.2011

Если мне не хватает библиотеки / проекта, делающего это, я не думаю, что есть простой способ сделать это.

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

person Vincent Guerci    schedule 11.04.2011
comment
Да, вот что я подумал ... Интересно, почему нет простого способа, как будто это обычная просьба (хотя все равно очень сложно найти решение ...). - person Shimix; 11.04.2011