Многократный Windows
При создании простого приложения браузера Вы захотите позволить пользователю открывать многократные окна и тип в URLs. Также необходимо сделать некоторые стратегические решения о том, как обработать новые запросы окна.
Открытие Windows
Можно реализовать многократные окна в приложении WebKit легко путем начала с Какао основанная на документе архитектура следующим образом:
Используя XCode, создайте основанное на документе приложение Какао. Ваш новый файл проекта будет уже содержать необходимые классы и соединять интерфейсом с файлами для поддержки многократных окон (а именно,
MyDocument.h
,MyDocument.m
, иMyDocument.nib
).Добавьте платформы WebKit к своему проекту.
Открытый
MyDocument.nib
использование Интерфейсного Разработчика и перетаскивает веб-представление от палитры Cocoa — GraphicsViews до Вашего окна документа.Создайте a
webView
выход вMyDocument.h
и считайте файл в Интерфейсного Разработчика. СоединитесьwebView
выход Владельца Файла к веб-представлению возражает, что Вы создали на предыдущем шаге.Добавьте код к
MyDocument.m
загрузить страницу по умолчанию. Можно добавить этот фрагмент кода кwindowControllerDidLoadNib:
метод:NSString *urlText = [NSString stringWithString:@"http://www.apple.com"];
[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlText]]];
Сборка и запущенный Ваше приложение.
При запуске приложения, необходимо видеть, что окно открывает веб-контент отображения. Можно также открыть многократные окна путем выбора New из меню File. Этот пример демонстрирует многократные объекты веб-представления независимо отображение веб-контента.
Ввод URLs
Если Вы хотите, чтобы пользователь ввел в ее собственном URL, добавьте текстовое поле к окну и выполните новый запрос загрузки каждый раз, когда пользователь вводит новый URL. Вот шаги, которые Вы выполняете:
Добавьте текстовое поле к окну в
MyDocument.nib
.Добавьте a
textField
выход и aconnectURL:
действие кMyDocument.h
. Читайте в изменениях вMyDocument.h
от интерфейсного разработчика.В Интерфейсном Разработчике сделайте соединение из текстового поля, которое Вы создали к
textField
выход Владельца и набора Файла действие кconnectURL:
. Когда пользователь входит в новый URL, этот метод вызывается.Реализуйте
connectURL:
метод для загрузки URL, введенного пользователем:- (IBAction)connectURL:(id)sender{
[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[sender stringValue]]]];
}
Сборка и запущенный Ваше приложение.
Теперь при вводе нового URL в текстовое поле новая страница загружается.
Обрабатывание новых запросов окна
По умолчанию, если Вы щелкаете по ссылке, запрашивающей, чтобы новое окно было открыто для отображения содержания той ссылки, ничто не происходит. Если Вы хотите изменить это поведение, Ваше приложение должно сделать стратегическое решение о новых запросах окна. Необходимо реализовать a WebUIDelegate
возразите для обработки этого случая. Снова, реализуйте методы делегата, которые Вы хотите. Вот шаги для следования:
Установите делегата после
MyDocument.nib
загружается. Если у Вас есть Какао основанное на документе приложение, то можно добавить этот код к MyDocumentwindowControllerDidLoadNib:
метод:[webView setUIDelegate:self];
Это - хорошая практика для подобных браузеру приложений для установки названия группы объектов веб-представления после того, как они будут загружены из файла пера. Иначе, нажимание на некоторые ссылки может привести к многократным новым запросам окна, потому что код HTML для ссылки не мог бы использовать то же имя кадра. Название группы является произвольным идентификатором, используемым для группировки связанных кадров. Например, можно установить название группы следующим образом:
[webView setGroupName:@"MyDocument"];
Реализуйте
webView:createWebViewWithRequest:
метод делегата создать окно, содержащее веб-представление и загрузить запрос:- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
{
id myDocument = [[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil];
[[[myDocument webView] mainFrame] loadRequest:request];
return [myDocument webView];
}
Сборка и запущенный Ваше приложение.
Теперь, когда Вы щелкаете по ссылке, запрашивающей новое окно, новое окно создается для отображения содержания той ссылки. Это - всего один пример многих решений, которые Ваше приложение может принять относительно политик и поведения пользовательского интерфейса. Вы используете другие методы WebUIDelegate и других делегатов веб-представления для изменения поведения.