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


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

  • 2016년 07월 13일에 작성됨

조회수 209


1 답변


좋아요
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개의 탭에서 같은 웹뷰를 사용하시려는 특별한 이유라도 있을까요?

  • 2016년 07월 14일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

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

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close