отображение веб-контента в быстром без API - PullRequest
0 голосов
/ 25 января 2019

Обзор

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

Проблемы

Я начал создавать свое приложение, добавив WKWebView к своему просмотру и загрузив веб-сайт с несколькими страницами (в данном случае, Google). Настройка выглядит так:

class ViewController: UIViewController {

var webKit: WKWebView = WKWebView()
@IBOutlet var mainView: UIView!



override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    let myURL = URL(string:"https://www.google.com")
    let myRequest = URLRequest(url: myURL!)
    setConfiguration()
    webKit.load(myRequest)

}

func setConfiguration() {
    webKit.scrollView.isScrollEnabled = false
    let configuration = WKWebViewConfiguration()
    webKit = WKWebView(frame: view.frame, configuration: configuration)
    webKit.navigationDelegate = self as? WKNavigationDelegate
    view.addSubview(webKit)
}


}

Как и следовало ожидать, он успешно загружает веб-страницу. Однако я сталкиваюсь с проблемами, выясняя, как загрузить новую ссылку на WebView из чего-то вроде сворачиваемого меню и / или UITableView .

Вопрос

Это возможно? Могу ли я получить что-то вроде UITableView (с, скажем, кликабельной ссылкой в ​​каждой ячейке) для достижения этой цели? Если нет, то как лучше решить эту проблему, учитывая вышеупомянутые условия.

1 Ответ

0 голосов
/ 25 января 2019

Реализуйте методы делегата WKNavigation (установите делегат навигации в вашем WKWebView) и свяжите пару кнопок со стрелками для goForward и goBack. В вашем табличном представлении просто храните строки для URL. При выборе вы загрузите веб-страницу.

Вам также понадобятся эти два метода, чтобы навигация работала.

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        decisionHandler(.allow)
}
func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
        decisionHandler(.allow)
}

Наконец, просто добавьте следующее в ваш info.plist

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

Кстати - вам нужно переместить URL-адрес в область действия класса и установить его в простой функции, которая изменяет URL-адрес с помощью аргумента. Сделайте еще одну отдельную функцию для загрузки страницы. Звоните по мере необходимости.

...