MisoBoy Blog...

WebView 를 활용한 웹브라우저 어플리케이션 예제 본문

Objective-C & Dev

WebView 를 활용한 웹브라우저 어플리케이션 예제

misoboy 2012. 4. 8. 17:49




//
//  ViewController.h
//  Web_View
//
//  Created by misoboy on 12. 4. 6..
//  Copyright (c) 2012년 __misoboy__. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIWebViewDelegate, UIAlertViewDelegate>
{
    // UIWebView 에 뿌려지기 위해 IBOutlet 선언
    IBOutlet UIWebView  *webView;
    // WebPage 로딩중 효과
    IBOutlet UIActivityIndicatorView *spinner;
    // URL 입력 TextField
    IBOutlet UITextField *urlField;
    // 뒤로가기 backButton
    IBOutlet UIBarButtonItem *backBtn;
    // 앞으로 가기 ForwardButton
    IBOutlet UIBarButtonItem *fwdBtn;
    // Alert Window 
    IBOutlet UIAlertView *alertView;
    
    

}
    @property (strong, nonatomic) UIWebView *webview;
    @property (strong, nonatomic) UIActivityIndicatorView *spinner;
    @property (strong, nonatomic) UITextField *urlField;
    @property (strong, nonatomic) UIBarButtonItem *backBtn;
    @property (strong, nonatomic) UIBarButtonItem *fwdBtn;
    @property (strong, nonatomic) UIAlertView *alertView;

    
    // 웹 페이지를 읽어 들임
    - (IBAction) loadUrl: (UITextField *) sender;

@end


//
//  ViewController.m
//  Web_View
//
//  Created by misoboy on 12. 4. 6..
//  Copyright (c) 2012년 __misoboy__. All rights reserved.
//

#import "ViewController.h"

#define ScreenWidth 320
#define ScreenHeight 480

@implementation ViewController
@synthesize webview;
@synthesize spinner;
@synthesize urlField;
@synthesize backBtn;
@synthesize fwdBtn;
@synthesize alertView;



// 제한된 사이트를 둘 경우 사용 할 수 있는 메서드
//- (bool)        webView : (UIWebView *) view
//                shouldStartLoadWithRequest:(NSURLRequest *)request 
//                navigationType:(UIWebViewNavigationType)navigationType
//{
//    if( [[[request URL] host] isEqualToString:@"www.ng.com"] )
//    {
//        return(NO);
//    }
//    return(YES);
//}
                

- (void)viewDidLoad {
    
    webView.delegate = self;
    // spinner 객체 생성 및 정의
    spinner = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth/2, ScreenHeight/2)];
    // spinner 위치 정의
    [spinner setCenter:self.view.center];
    // spinner 스타일 설정
    [spinner setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
    
    [self.view addSubview:spinner];
    
    // 초기 로드시 www.naver.com 초기화면 설정
    [self goUrl:@"http://www.naver.com"];
    
    [super viewDidLoad];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}
 
    // webView 처음 로드 시작 시....
- (void) webViewDidStartLoad: (UIWebView *) webView 
{
    // updateWebBrowser 호출
    [self updateWebBrowser];
}
    // webView 로드가 끝날 시...
- (void) webViewDidFinishLoad: (UIWebView *)webView
{
    // spinner stopAnimating
    [spinner stopAnimating];
}

// 사용자가 입력한 주소 접속 실패시 발생 되는 메서드
- (void) webView: (UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    NSLog(@"Fail Log");
    // alertView 객체 생성 및 설정
    alertView = [[UIAlertView alloc] initWithTitle:@"오류"
                                           message:@"페이지 오류가 발생 하였습니다."
                                          delegate:nil
                                 cancelButtonTitle:@"확인"
                                 otherButtonTitles:nil];
    // alertView Show
    [alertView show];
    // spinner stopAnimating
    [spinner stopAnimating];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (void) loadUrl: (UITextField * ) sender
{
    // UITextField 에서 입력한 URL 을 가져온다.
    NSString* urlStr = [sender text];
    
    BOOL prefix = [ urlStr hasPrefix: @"http://" ];
    
    // http:// 를 붙이지 않았을 경우...
    if (!prefix) 
    {
        // http:// + 사용자가 입력한 주소를 Appending 한다.
        urlStr = [@"http://" stringByAppendingString: urlStr];
    }
    
    // goUrl 메서드 호출
    [self goUrl:(urlStr)];
}

- (void) goUrl: (NSString *) urlStr
{
    
    // 입력받은 URL 주소 NSString 값을 URL 로 변환한다.
    NSURL* url = [NSURL URLWithString: urlStr];
    
    // URL의 페이지에 대한 정보를 가져온다.
    NSURLRequest * urlReq = [NSURLRequest requestWithURL: url];
    
    // UIWebView 에 request 받은 정보를 뿌려준다.
    [webView loadRequest: urlReq ];
    
    webview.scalesPageToFit = YES;
}

- (void) updateWebBrowser 
{
    // webView 가 현자 로딩중인지 아니지 판단 여부
    BOOL loading = webView.loading;
    
    // activity 애니메이션 작동 판단 여부
    BOOL animating = [spinner isAnimating];

    
    // WebView 가 로딩중 && spinner 는 로딩X 일 경우..
    if( loading == YES && animating == NO )
    {        
        // spinner startAnimating 
        [spinner startAnimating];
    }
    // WebView 가 로딩X && spinner 는 로딩O 일 경우...
    else if( loading == NO && animating == YES )
    {
        // spinner stopAnimating
        [spinner stopAnimating];
    }
    
    // 현재 URL 가져오기...
    NSURL *url = [webView.request URL];
    
    // URL의 전체 경로 가져오기...
    NSString * urlStr = [url absoluteString ];
    
    // 가져온 URL 전체경로를 UITextFiled 에 뿌려주기...
    urlField.text = urlStr;
    
    backBtn.enabled = webView.canGoBack;
    fwdBtn.enabled = webView.canGoForward;
}


@end