2015-02-04 3 views
0

WebView가 포함 된보기가 있습니다. 해당 웹보기의 링크를 클릭하고 링크가 내가 사용하는 URL의 동일한 도메인에 있지 않으면 다른보기가 열립니다 보기에 다른 webview가 포함되어 있고 해당 URL을 전달합니다.보기에서 다른보기로 변수를 전달합니다.

여기 내 첫 번째보기

import UIKit 

class ViewController: UIViewController, UIWebViewDelegate { 

    @IBOutlet weak var webView: UIWebView! 

    var url = "http://someurl" 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     webView.delegate = self 

     let requestURL = NSURL(string:url) 
     let request = NSURLRequest(URL: requestURL!) 
     webView.loadRequest(request) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 

    } 

    func webViewDidStartLoad(webView : UIWebView) { 
     //UIApplication.sharedApplication().networkActivityIndicatorVisible = true 

    } 

    func webViewDidFinishLoad(webView : UIWebView) { 

    } 

    func webView(webView: UIWebView, shouldStartLoadWithRequest r: NSURLRequest, navigationType nt: UIWebViewNavigationType) -> Bool { 

     var url = webView.request?.URL.absoluteString 

     if nt == UIWebViewNavigationType.LinkClicked { 
      self.switchScreen(r) 
      return false 
     } 
     return true 
    } 

    func switchScreen(url: NSURLRequest) { 
     let mainStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) 
     let vc : UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("innerBrowser") as UIViewController 
     vc.url = url 
     self.presentViewController(vc, animated: true, completion: nil) 

    } 



} 

다음 두 번째보기 내가 그것을 잘 작동 두 번째보기에서 URL을 설정

import UIKit 

class InnerBrowserController: UIViewController, UIWebViewDelegate { 

    @IBOutlet weak var innerBrowserView: UIWebView! 

    var url:NSURLRequest? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     //let requestURL = NSURL(string:url!) 
     //let request = NSURLRequest(URL: requestURL!) 

     self.innerBrowserView.loadRequest(url!) 

    } 

} 

.

+0

실제로 붙어있는 곳은 어디입니까? 새 viewController를 표시 할 때 [vc loadRequest : r]과 같은 두 번째 viewController 메서드를 실행하는 것이 간단하지 않습니까? – Injectios

+0

vc는 loadRequest ..가 없습니다. – animake

+0

다른 URL로보기에서 URL을 전달하는 데 막혔습니다 – animake

답변

2

몇 가지 생각이 듭니다.

먼저 InnerBrowserController으로 전송하는 대신 UIViewController으로 전송합니다. 당신은 그것을 좋아 할 수있는 :

let vc = mainStoryboard.instantiateViewControllerWithIdentifier("innerBrowser") as InnerBrowserController 

두 번째 점은 두 번째보기로 vc.url, 따라서, 당신은 통과하지 못한 값을 지정하지 않을 것으로 보인다는 것이다. 당신은 그런 작업을 수행 할 수 있습니다 당신이 innerBrowserView에 스토리 보드에서로드 뷰 컨트롤러를 캐스팅하는 경우

let requestURL = NSURL(string:url) 
vc.url = NSURLRequest(URL: requestURL!) 

전자에만 작동합니다.

어쩌면 내가 놓친 것이 있지만 문제가 해결 될 것이라고 생각합니다.

+1

요청을 저장하는 메소드 또는 변수를 작성했습니다.이 행을 질문에 추가하지 않았습니다. vc.url = url, 내가 언급 한 캐스트로 테스트 해 보겠다. – animake

+0

문자열이 아니고 NSURLRequest (다른 컨트롤러의 변수가 기대하는 것) 이후에 그 줄을 편집했다. Swift는 적절한 캐스트가 없으면 그 값을 할당하지 못하게한다. – Miknash

+0

좋다. 정말 고마워. 좋은 하루 되세요. – animake

관련 문제