Skip to content

Commit

Permalink
Merge pull request #33 from 42Box/dev/31-feat-모든-탭-열어놓기/#31
Browse files Browse the repository at this point in the history
feat: 모든 탭 열어놓기
  • Loading branch information
JH713 authored Jan 25, 2024
2 parents 0b65e53 + acae684 commit c5c3d15
Show file tree
Hide file tree
Showing 6 changed files with 121 additions and 3 deletions.
2 changes: 1 addition & 1 deletion iBox/Sources/Presenter/BoxList/BoxListView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class BoxListView: BaseView {
var folderArr = [
Folder(name: "기본 폴더", color: .gray, webs: [
Web(name: "42 Intra", url: "https://profile.intra.42.fr/"),
Web(name: "42Where", url: "https://where42.kr/"),
Web(name: "42Where", url: "https://www.where42.kr/"),
Web(name: "42Stat", url: "https://stat.42seoul.kr/"),
Web(name: "집현전", url: "https://42library.kr/")
]),
Expand Down
4 changes: 2 additions & 2 deletions iBox/Sources/Presenter/BoxList/BoxListViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ class BoxListViewController: BaseNavigationBarViewController<BoxListView> {

extension BoxListViewController: BoxListViewDelegate {
func didSelectWeb(at url: String, withName name: String) {
let viewController = WebViewController()
viewController.title = name
let viewController = PreloadedWebViewController()
viewController.title = name
viewController.selectedWebsite = url
navigationController?.pushViewController(viewController, animated: true)
}
Expand Down
41 changes: 41 additions & 0 deletions iBox/Sources/Presenter/Web/PreloadedWebView.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
//
// PreloadedWebView.swift
// iBox
//
// Created by 이지현 on 1/18/24.
//

import UIKit
import WebKit

import SnapKit

class PreloadedWebView: BaseView {
var selectedWebsite: String? {
didSet {
getWebView()
}
}

private var webView: WKWebView?

override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .systemBackground
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

private func getWebView() {
guard let selectedWebsite else { return }
webView = WebViewPreloader.shared.getWebView(for: URL(string: selectedWebsite)!)
guard let webView else { return }
addSubview(webView)
webView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
}

}
33 changes: 33 additions & 0 deletions iBox/Sources/Presenter/Web/PreloadedWebViewController.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
//
// PreloadedWebViewController.swift
// iBox
//
// Created by 이지현 on 1/18/24.
//

import UIKit

class PreloadedWebViewController: BaseNavigationBarViewController<PreloadedWebView> {
var selectedWebsite: String?

override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemBackground
navigationItem.largeTitleDisplayMode = .never

guard let contentView = contentView as? PreloadedWebView else { return }
contentView.selectedWebsite = selectedWebsite
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)

guard let selectedWebsite else { return }
WebViewPreloader.shared.resetWebView(for: URL(string: selectedWebsite)!)
}

override func setupNavigationBar() {
setNavigationBarHidden(true)
}

}
11 changes: 11 additions & 0 deletions iBox/Sources/SceneDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,17 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
window?.windowScene = windowScene
window?.rootViewController = MainTabBarController()
window?.makeKeyAndVisible() // 윈도우를 화면에 보여줌

// 나중에 userDefaults에 저장해두고 꺼내와서 preload하기
let urlsToPreload = [
URL(string: "https://profile.intra.42.fr/")!,
URL(string: "https://www.where42.kr/")!,
URL(string: "https://stat.42seoul.kr/")!,
URL(string: "https://42library.kr/")!,
URL(string: "https://cabi.42seoul.io/")!,
URL(string: "https://24hoursarenotenough.42seoul.kr/")!
]
WebViewPreloader.shared.preload(urls: urlsToPreload)
}

func sceneDidDisconnect(_ scene: UIScene) {
Expand Down
33 changes: 33 additions & 0 deletions iBox/Sources/Utils/WebViewPreloader.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
//
// WebViewPreloader.swift
// iBox
//
// Created by 이지현 on 1/18/24.
//

import Foundation
import WebKit

class WebViewPreloader {
static let shared = WebViewPreloader()
private var webViews: [URL: WKWebView] = [:]

private init() {}

func preload(urls: [URL]) {
for url in urls {
let webView = WKWebView()
webView.load(URLRequest(url: url))
webViews[url] = webView
}
}

func getWebView(for url: URL) -> WKWebView? {
return webViews[url]
}

func resetWebView(for url: URL) {
webViews[url]?.load(URLRequest(url: url))
}

}

0 comments on commit c5c3d15

Please sign in to comment.