여러개의 뷰 컨트롤러에서 하나의 웹뷰 공유하는법

조회수 1996회

제가 만드는 앱이 탭바 컨트롤러가 베이스로 된 앱인데 3개의 탭이 하나의 웹뷰를 공유하도록 만들고 싶습니다. 두번째 세번째 탭을 누르면 같은 웹뷰에 다른 페이지 로드를 해주는 방식으로요. 어떻게 구성해야 될지 잘 모르겠네요. 도와주세요ㅠ

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 1.싱글톤으로 웹뷰를 만들고

    class WebView: UIWebView
    {
        static let sharedInstance = WebView()
    }
    

    2.이 웹뷰를 탭의 뷰컨트롤러에 추가해 줍니다.

    import UIKit
    
    class FirstViewController: UIViewController {
    
        override func viewWillAppear(animated: Bool)
        {
            let url = NSURL (string: "http://hashcode.co.kr")
            let requestObj = NSURLRequest(URL: url!)
            WebView.sharedInstance.loadRequest(requestObj)
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
            view.addSubview(WebView.sharedInstance)
            WebView.sharedInstance.frame = CGRect(x: 0, y: 0, width: 320, height: 480)
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
    
    }
    

    이제 3개의 탭에 모두 같은 방식으로 웹뷰를 추가하고 viewDidLoad에서 서로 다른 페이지를 로딩해 주면 됩니다.

    의견

    그런데 이렇게 하는게 효율적일지는 모르겠네요. 매번 네트워크를 통해 새로운 페이지를 로딩해야 하니까요. 그냥 3개의 다른 웹뷰를 쓰면 각 웹뷰가 로딩된 페이지를 가지고 있기 때문에 매번 네트워크를 통해 페이지를 로딩할 필요가 없지 않을까요? 3개의 탭에서 같은 웹뷰를 사용하시려는 특별한 이유라도 있을까요?

    • 저렇게 하려는 이유는 메모리 때문에요 . 웹뷰 객체가 3개나 있으면 각각 웹뷰의 세션 관리(로그인)도 그렇고 메모리도 많이 잡아먹을꺼 같아서요. 매번 페이지 로드하는 것도 좀 문제가 있을수 있겠네요. 답변 정말 감사합니다. 알 수 없는 사용자 2016.7.14 11:37

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)