2012-06-26 4 views
1

Я пытаюсь сделать UIWebView, но не позволяя пользователю посещать другую часть данного URL-адреса. Что-то вроде они могли только идти конкретные страницы, где я позволяю им идти, а не другие.iOS UIWebView Restriction

Я не слишком уверен в методе - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType, поэтому я, возможно, совершил ошибку. Теперь проблема заключается в том, что если я включу этот метод, я загрузился в webpage, но не смог просмотреть его. Даже раздел, который я допускаю.

Я хотел бы знать, если 1) Я пропускаю какой-либо важный код ?, 2) Я что-то пропустил в коде или почему мой код не так?

Является новым для Xcode, поэтому мне потребуются все указания, которые вы, ребята, можете дать/научить меня. Ниже мой код из контроллера просмотра.

EDIT1: Есть ли какой-либо готовый метод Xcode, или мне нужно создать свой собственный метод, чтобы при просмотре UIWebView, и когда они нажимают на другую ссылку, если это что-то другое, кроме того, что я указываю, запрос отклоняется? Можно ли создать такой метод, чтобы он постоянно проверял абсолютный URL-адрес, и если он изменился на что-то другое, кроме того, что я укажу, он вернется к указанному URL-адресу?

в my.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController<UIWebViewDelegate> 

{ 
    IBOutlet UIWebView *webView; 
} 

@property (nonatomic, retain) UIWebView *webView; 

@end 

в моей .m

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize webView; 

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSString *currentURL = [[request URL]absoluteString]; 
    NSRange range1 = [currentURL rangeOfString:@"news"]; 
    NSRange range2 = [currentURL rangeOfString:@"pdf"]; 



    if (range1.location ==NSNotFound){ 
     currentURL = @"http://www.imc.jhmi.edu/news.html"; 
     [webView reload]; 
     return YES; 
    }else if (range2.location ==NSNotFound){ 
     currentURL = @"http://www.imc.jhmi.edu/news.html"; 
     [webView reload]; 
     return YES; 
    } 
    return NO; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    webView.scalesPageToFit=YES; 
    webView.delegate = self; 

    NSString *urlAddress = @"http://www.imc.jhmi.edu/news.html"; 
    NSURL *url =[NSURL URLWithString:urlAddress]; 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
    [webView loadRequest:requestObj]; 

} 
+0

Кажется, что ваш код попадает в бесконечный цикл. Удалить [webView reload]; из условия if и попробуйте. – san

ответ

2

Этот метод делегата Webview: shouldStartLoadWithRequest: navigationType: посылается перед веб-просмотр начинается загрузка кадра. и оно возвращает значение ДА, если веб-представление должно начать загрузку содержимого; иначе NO.

Ваш метод возвращает NO, когда currentURL с диапазоном1 и диапазоном2 не найден.

+0

Ах! Теперь я понимаю. Большое спасибо. Есть ли какой-либо готовый метод Xcode или мне нужно создать свой собственный метод, чтобы метод отправлялся, когда я нажимаю URL-адрес в веб-представлении, если это не то, что я указываю/разрешаю, он перенаправляет URL-адрес, который я хочу? –