2015-05-27 2 views
0

Я пытаюсь отобразить список веб-страниц, которые пользователь может переключаться между собой в моем приложении. Я успешно справился с документами. однако я не хочу, чтобы пользователь мог перемещаться с этих страниц. Я узнал, как это сделать, взглянув на него. Проблема в том, что она выполняется только на первой странице. Когда я перехожу на другую страницу, то shouldStartLoadWithRequest перестает работать, даже когда я вернусь на первую страницу. (Все это делается с помощью специально разработанных кнопок назад и вперед.) Как я могу исправить это так, что он будет вызываться каждый раз и не позволит пользователю щелкнуть ссылки и перейти от моих заданных страниц? Я новичок в объективе-c. Все соответствующие коды приведены ниже. Некоторые вещи были объявлены глобально в .h. Извините, это грубо. Я вложил в нее только то, что нужно, чтобы превратить его в форматирование кода. Благодаря!Почему thisStartLoadWithRequest запускается только при первом запуске?

Мой .h файл:

#import <UIKit/UIKit.h> 

@interface learnViewController : UIViewController <UINavigationControllerDelegate> 
{ 
    IBOutlet UIWebView *web; 
    UIButton *backButton; 
    UIButton *forButton; 
} 
@end 

Мой .m файл

#import "learnViewController.h" 
#import "ViewController.h" 

static NSString* links[] = 
{ 
    @"http://www.nlm.nih.gov/medlineplus/ency/article/000141.htm", 
    @"http://www.nlm.nih.gov/medlineplus/ency/article/000065.htm", 
    @"http://www.nlm.nih.gov/medlineplus/ency/article/001087.htm", 
    @"http://www.nlm.nih.gov/medlineplus/ency/article/000091.htm", 
    @"http://www.nlm.nih.gov/medlineplus/ency/article/007270.htm", 
    @"http://www.nlm.nih.gov/medlineplus/ency/article/000145.htm", 
    @"http://www.nlm.nih.gov/medlineplus/ency/article/000093.htm", 
    @"http://www.nlm.nih.gov/medlineplus/ency/article/000087.htm", 
    @"http://www.nlm.nih.gov/medlineplus/ency/article/000140.htm", 
    @"http://www.nlm.nih.gov/medlineplus/ency/article/000132.htm" 
}; 
int numlinks = 10; 
int i = 0; 

@interface learnViewController() 

@end 

@implementation learnViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    float viewWidth = self.view.frame.size.width; 
    float viewHeight = self.view.frame.size.height; 

    self.view.multipleTouchEnabled = true; 
    //Background 
    UIImageView *backgroundView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, viewWidth, viewHeight)]; 
    backgroundView.image = [UIImage imageNamed:@"Background.png"]; 
    [self.view addSubview:backgroundView]; 
    //Show Portal 
    web = [[UIWebView alloc]initWithFrame:CGRectMake(0.0, viewHeight/34.0, viewWidth, (viewHeight - viewHeight/6.4))]; 
    self->web.delegate = self; 
    web.scrollView.scrollEnabled = TRUE; 
    web.scalesPageToFit = TRUE; 
    [self loadDocument:links[i] inView:web]; 
    [self.view addSubview:web]; 
    //Buttons 
    UIButton *homeButton = [[UIButton alloc] initWithFrame:CGRectMake((viewWidth/2.0 - viewWidth/6.0/2.0), (viewHeight - viewHeight*280.0/2208.0/2.0 - viewWidth/6.0/2.0), (viewWidth/6.0), (viewWidth/6.0))]; 
    [homeButton 
    setBackgroundImage:[UIImage imageNamed:@"Home.png"] 
    forState:UIControlStateNormal]; 
    [homeButton addTarget:self action:@selector(homePressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:homeButton]; 

    backButton = [[UIButton alloc] initWithFrame:CGRectMake((viewWidth/2.0/3.5 - viewWidth/9.0/2.0), (viewHeight - viewHeight*280.0/2208.0/2.0 - viewWidth/9.0/2.0), (viewWidth/9.0), (viewWidth/9.0))]; 
    [backButton 
    setBackgroundImage:[UIImage imageNamed:@"Back.png"] 
    forState:UIControlStateNormal]; 
    backButton.enabled = FALSE; 
    [backButton addTarget:self 
        action:@selector(backPressed:) 
     forControlEvents:UIControlEventTouchDown]; 
    [self.view addSubview:backButton]; 

    forButton = [[UIButton alloc] initWithFrame:CGRectMake((viewWidth/2.0/3.5*2.0 - viewWidth/9.0/2.0), (viewHeight - viewHeight*280.0/2208.0/2.0 - viewWidth/9.0/2.0), (viewWidth/9.0), (viewWidth/9.0))]; 
    [forButton 
    setBackgroundImage:[UIImage imageNamed:@"Forward.png"] 
    forState:UIControlStateNormal]; 
    [forButton addTarget:self 
        action:@selector(forPressed:) 
     forControlEvents:UIControlEventTouchDown]; 
    [self.view addSubview:forButton]; 

    UIButton *refButton = [[UIButton alloc] initWithFrame:CGRectMake((viewWidth - viewWidth/2.0/3.5*2.0 - viewWidth/9.0/2.0), (viewHeight - viewHeight*280.0/2208.0/2.0 - viewWidth/9.0/2.0), (viewWidth/9.0), (viewWidth/9.0))]; 
    [refButton 
    setBackgroundImage:[UIImage imageNamed:@"Scale.png"] 
    forState:UIControlStateNormal]; 
    [refButton addTarget:self 
        action:@selector(refPressed:) 
     forControlEvents:UIControlEventTouchDown]; 
    [self.view addSubview:refButton]; 

    UIButton *webButton = [[UIButton alloc] initWithFrame:CGRectMake((viewWidth - viewWidth/2.0/3.5 - viewWidth/9.0/2.0), (viewHeight - viewHeight*280.0/2208.0/2.0 -  viewWidth/9.0/2.0), (viewWidth/9.0), (viewWidth/9.0))]; 
    [webButton 
    setBackgroundImage:[UIImage imageNamed:@"Web.png"] 
    forState:UIControlStateNormal]; 
    [webButton addTarget:self 
        action:@selector(webPressed:) 
     forControlEvents:UIControlEventTouchDown]; 
    [self.view addSubview:webButton]; 
} 
//Button presses 
-(void)homePressed:(id)sender 
{ 
    ViewController *home = [[ViewController alloc] initWithNibName:nil bundle:nil]; 
    [self presentViewController:home animated:YES completion:NULL]; 
} 

- (void) refPressed:(id)sender 
{ 
    [self loadDocument:links[i] inView:web]; 
} 

-(void)backPressed:(id)sender 
{ 
    float viewWidth = self.view.frame.size.width; 
    float viewHeight = self.view.frame.size.height; 
    if (i > 0) 
    { 
     [web removeFromSuperview]; 
     i--; 
     web = [[UIWebView alloc] initWithFrame:CGRectMake(0.0, viewHeight/34.0, viewWidth, (viewHeight - viewHeight/6.4))]; 
     [self loadDocument:links[i] inView:web]; 
     web.scrollView.scrollEnabled = TRUE; 
     web.scalesPageToFit = TRUE; 
     [self.view addSubview:web]; 
     forButton.enabled = TRUE; 
    } 
    if (i == 0) 
    { 
     backButton.enabled = FALSE; 
    } 
} 

-(void)forPressed:(id)sender 
{ 
    float viewWidth = self.view.frame.size.width; 
    float viewHeight = self.view.frame.size.height; 
    if (i < numlinks - 1) 
    { 
     [web removeFromSuperview]; 
     i++; 
     web = [[UIWebView alloc] initWithFrame:CGRectMake(0.0, viewHeight/34.0, viewWidth, (viewHeight - viewHeight/6.4))]; 
     [self loadDocument:links[i] inView:web]; 
     web.scrollView.scrollEnabled = TRUE; 
     web.scalesPageToFit = TRUE; 
     [self.view addSubview:web]; 
     backButton.enabled = TRUE; 
    } 
    if (i == numlinks - 1) 
    { 
     forButton.enabled = FALSE; 

    } 
} 

-(void)loadDocument:(NSString*)documentName inView:(UIWebView*)webView 
{ 
    NSString *url = links[i]; 
    NSURL *nsurl = [NSURL URLWithString:url]; 
    NSURLRequest *nsrequest = [NSURLRequest requestWithURL:nsurl]; 
    [webView loadRequest:nsrequest]; 
} 

-(void)webPressed:(id)sender 
{ 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:links[i]]]; 
} 

-(BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSURL *url = request.URL; 
    NSString *urlString = url.absoluteString; 
    NSRange range = [urlString rangeOfString:links[i]]; 
    if (range.location != NSNotFound) 
    { 
     return YES; 
    } 
    else 
    { 
     return NO; 
    } 
} 

- (void)viewDidUnload 
{ 
    [self->web stopLoading]; 
    self->web.delegate = nil; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

ответ

0

Хорошо, я понял это путем проб и ошибок, так как никто не хотел, чтобы помочь мне. Я пробовал искать ответы на подобные вопросы, но ничего на самом деле не работало для меня. Если вы читаете это и имеете ту же проблему, вот как вы его исправите. Все, что вам нужно сделать, это сбросить веб-делегат ноль затем обратно к себе, как так:

self.webView.delegate = nil; 
self.webView.delegate = self; 

Я не знаю, почему весь остальной код был настолько сложным, и я могу только догадываться, почему это работает. Мне просто повезло честно, но я думаю, что это может очистить кеш, когда вы это делаете, тем самым делая каждую страницу свежей для программы. Об этом говорили другие люди. Однако их методы не работали для меня ни из-за моего отсутствия опыта, ни из-за того, что они не соответствовали моему конкретному делу. Это намного проще и гарантированно работает до тех пор, пока вы убедитесь, что он делает это каждый раз при загрузке одной из ваших назначенных веб-страниц. Пожалуйста, если вы читаете это. Если кто-то будет любезно смотреть на мой пост и объяснить, почему это работает более подробно, пожалуйста, не стесняйтесь!

Смежные вопросы