수색…


비고

UIWebView 대리자 기능 : -

목표 -C 전투

- (BOOL)webView:(UIWebView *)webView 
shouldStartLoadWithRequest:(NSURLRequest *)request 
 navigationType:(UIWebViewNavigationType)navigationType;

- (void)webView:(UIWebView *)webView 
didFailLoadWithError:(NSError *)error;

- (void)webViewDidFinishLoad:(UIWebView *)webView;

- (void)webViewDidStartLoad:(UIWebView *)webView;

UIWebView 인스턴스 만들기

빠른

let webview = UIWebView(frame: CGRect(x: 0, y: 0, width: 320, height: 480))

목표 -C

UIWebView *webview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];

//Alternative way of defining frame for UIWebView
UIWebView *webview = [[UIWebView alloc] init];
CGRect webviewFrame = webview.frame;
webviewFrame.size.width = 320;
webviewFrame.size.height = 480;
webviewFrame.origin.x = 0;
webviewFrame.origin.y = 0;
webview.frame = webviewFrame;

URL 요청하기

url 에서 webview의 콘텐츠로드

빠른

webview.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.google.com")!))

목표 -C

[webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]];

웹 컨텐츠로드 중지

메소드 stopLoading() 은 webview의 현재로드 프로세스를 중지합니다.

빠른

webview.stopLoading()

목표 -C

[webview stopLoading];

현재 웹 콘텐츠 다시로드

빠른

webview.reload()

목표 -C

[webview reload];

콘텐츠 크기 결정

많은 경우, 예를 들어 테이블 뷰 셀에서 웹보기를 사용할 때 렌더링 된 HTML 페이지의 내용 크기를 결정하는 것이 중요합니다. 페이지를로드 한 후 UIWebViewDelegate 대리자 메서드에서 계산할 수 있습니다.

- (void) webViewDidFinishLoad:(UIWebView *) aWebView {
    CGRect frame = aWebView.frame;
    frame.size.height = 1;
    aWebView.frame = frame;
    CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    aWebView.frame = frame;

    NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height);
}

이 코드는 피팅 크기를 측정하기 전에 곧 웹보기의 높이를 1로 설정하는 추가 트릭을 사용합니다. 그렇지 않으면 단순히 현재 프레임 크기를보고합니다. 측정 후 즉시 높이를 실제 높이로 설정합니다.

출처

HTML 문자열로드

웹보기는 로컬에서 생성 된 HTML 문자열을로드하는 데 유용합니다.

NSString *html = @"<!DOCTYPE html><html><body>Hello World</body></html>";
[webView loadHTMLString:html baseURL:nil];

빠른

  let htmlString = "<h1>My First Heading</h1><p>My first paragraph.</p>"
  webView.loadHTMLString(htmlString, baseURL: nil)

로컬 기본 URL을 지정할 수 있습니다. 이는 앱 번들에서 이미지, 스타일 시트 또는 스크립트를 참조 할 때 유용합니다.

NSString *html = @"<!DOCTYPE html><html><head><link href='style.css' rel='stylesheet' type='text/css'></head><body>Hello World</body></html>";
[self loadHTMLString:html baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] resourcePath]]];

이 경우 style.css 는 앱의 리소스 디렉토리에서 로컬로로드됩니다. 물론 원격 URL을 지정할 수도 있습니다.

JavaScript로드

stringByEvaluatingJavaScriptFromString() 메서드를 사용하여 UIWebView 에서 사용자 정의 JavaScript를 실행할 수 있습니다.이 메서드는 script 매개 변수로 전달 된 JavaScript 스크립트를 실행 한 결과를 반환하거나 스크립트가 실패하면 nil을 반환합니다.

빠른

문자열에서 스크립트로드

webview.stringByEvaluatingJavaScriptFromString("alert('This is JavaScript!');")

로컬 파일에서 스크립트로드

//Suppose you have javascript file named "JavaScript.js" in project.
let filePath = NSBundle.mainBundle().pathForResource("JavaScript", ofType: "js")
        do {
            let jsContent = try String.init(contentsOfFile: filePath!, encoding: NSUTF8StringEncoding)
            webview.stringByEvaluatingJavaScriptFromString(jsContent)
        }
        catch let error as NSError{
            print(error.debugDescription)
        }

목표 -C

문자열에서 스크립트로드

[webview stringByEvaluatingJavaScriptFromString:@"alert('This is JavaScript!');"];

로컬 파일에서 스크립트로드

//Suppose you have javascript file named "JavaScript.js" in project.
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"JavaScript" ofType:@"js"];
NSString *jsContent = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
[webview stringByEvaluatingJavaScriptFromString:jsContent];

참고 stringByEvaluatingJavaScriptFromString: 메서드는 JavaScript 평가가 완료 될 때까지 동 기적으로 대기합니다. 검사하지 않은 자바 스크립트 코드가있는 웹 콘텐츠를로드하는 경우이 메소드를 호출하면 앱이 중단 될 수 있습니다. 가장 좋은 방법은 WKWebView 클래스를 채택하고 대신 evaluateJavaScript:completionHandler: 메서드를 사용하는 것입니다. 그러나 WKWebView 는 iOS 8.0 이상에서 사용할 수 있습니다.

.pdf, .txt, .doc 등의 문서 파일로드

웹 페이지 대신에 .pdf, .txt, .doc 등의 iOS WebView에 문서 파일을로드 할 수 있습니다. loadData 메소드는 NSData 를 webview에로드하는 데 사용됩니다.

빠른

//Assuming there is a text file in the project named "home.txt".
let localFilePath = NSBundle.mainBundle().pathForResource("home", ofType:"txt");
let data = NSFileManager.defaultManager().contentsAtPath(localFilePath!);
webview.loadData(data!, MIMEType: "application/txt", textEncodingName:"UTF-8" , baseURL: NSURL())

목표 -C

//Assuming there is a text file in the project named "home.txt".
NSString *localFilePath = [[NSBundle mainBundle] pathForResource:@"home" ofType:@"txt"];
NSData *data = [[NSFileManager defaultManager] contentsAtPath:localFilePath];
[webview loadData:data MIMEType:@"application/txt" textEncodingName:@"UTF-8" baseURL:[NSURL new]];

UIWebview 내에서 클릭 할 수있는 링크 만들기

여기에 이미지 설명을 입력하십시오.

vc.h에서

@interface vc : UIViewController<UIWebViewDelegate>

vc.m에서

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
    
    
    if (navigationType == UIWebViewNavigationTypeLinkClicked){
        //open it on browser if you want to open it in same web view remove return NO;
        NSURL *url = request.URL;
        if ([[UIApplication sharedApplication] canOpenURL:url]) {
            [[UIApplication sharedApplication] openURL:url];
        }
        return NO;
        
    }
    
    return YES;
    
}

WebView에 로컬 HTML 파일로드

첫째, HTML 파일을 프로젝트에 추가하십시오 (파일 추가 옵션을 선택하라는 메시지가 표시 되면 필요에 따라 항목 복사를 선택하십시오)

다음 코드 행은 HTML 파일의 내용을 WebView로로드합니다.

webView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("YOUR HTML FILE", ofType: "html")!})
  • HTML 파일의 이름이 index.html 인 경우 HTML 파일index바꿉니다.
  • 이 코드는 viewDidLoad () 또는 viewDidAppear () 또는 다른 함수에서 사용할 수 있습니다.


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow