Проблемы с использованием / изменением UITextField в настройках браузера - PullRequest
0 голосов
/ 09 января 2012

Как небольшой проект, чтобы понять API Какао / Какао Touch, я работал над небольшим браузером.Мне удалось создать простой дизайн, в котором есть кнопки «назад», «вперед» / «перезагрузить», сама адресная строка и кнопка подключения (в другой момент я должен выяснить, как изменить клавиатуру для перехода в режим «Перейти»).кнопка вместо обычного возврата.

Моя текущая проблема заключается в том, что функция моей кнопки подключения общего назначения выглядит следующим образом:

-(IBAction)connect:(id)sender
{
    NSURL *url = [NSURL URLWithString:address.text]; //address is the address bar
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    [webView loadRequest:request];
    [address resignFirstResponder]; //kill the address entry keyboard
}

Однако, по какой-то причине, URL понимается только в том случае, еслиперед ним стоит «* 1006. *. Просто ввести« google.com »и нажать кнопку« Подключить »ничего не дает. Я полагаю, что это либо скрытая проблема с классом NSURL или UIWebView, но документация по API не особовремя от времени полезно, и я просто не могу понять, какие именно. Мне кажется, что автоматическое добавление 'http://' в начало свойства текста адресной строки может быть плохой идеей, в случае, если вместо этого понадобится' https://' (хотя нас другой стороны, обычный веб-сайт часто использует безопасный протокол, но это не всегда так).

Я тожеo проблемы с кнопками «назад» и «вперед» в том, что они не обновляют адрес поля адреса.Это понятно, поскольку адресная строка не связана напрямую с WebView (возможно, есть часть UIWebView, которая делает это, с чем я не сталкивался?), И я не нашел способ обновить адресную строкуотобразить новый URL.Я отметил, что существуют методы UIWebViewDelegate, которые включают такие вещи, как webViewDidStartLoad , но я не полностью осознаю, как правильно использовать эти вещи.Я попытался использовать логическое значение [webView isLoading] в качестве теста, а затем соответствующим образом изменить URL-адрес адресной строки, но, похоже, это работает безрезультатно, возможно, из-за кэширования или чего-то подобного.

Прошу прощения, если я не разработал некоторые вещи достаточно хорошо или если на эти вопросы уже дан ответ;Я сделал быстрый поиск и немного осмотрелся в Интернете, чтобы не найти какой-либо совет относительно того, что делать.Как я уже сказал, документация по API Apple, хотя и очень глубокая, иногда неудобна в использовании.Если у вас есть еще вопросы относительно того, к чему я стремлюсь, я обязательно постараюсь ответить как можно лучше.

1 Ответ

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

NSURL очень требователен и возвращает nil для всего, что не анализируется как действительный URL:

С NSURL URLWithString: документация метода:

URLString

Строка, с которой нужно инициализировать объект NSURL. Должен быть URL-адрес, соответствующий RFC 2396. Этот метод анализирует URLString в соответствии с RFC 1738 и 1808.

Вот ссылка на RFC 2396 .

Чтобы извлечь текущий загруженный адрес, вы можете использовать метод делегата UIWebViewDelegate webViewDidFinishLoading:, чтобы извлечь текущий URL и обновить текстовое поле:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    textField.text = webView.request.URL.absoluteString;
}
...