shouldStartLoadwithRequest не вызывается в подклассе - PullRequest
2 голосов
/ 03 октября 2011

У меня есть приложение, контролируемое просмотром.На моем xib у меня нет веб-просмотров, но у меня есть кнопки, которые вызывают классы, у которых есть веб-просмотры.Таким образом, нажмите кнопку один, и Uiwebview всплывает так далее и так далее.

Теперь на одном из моих занятий я открываю удаленную веб-страницу, на которой есть ссылка.Я хочу переопределить эту ссылку кнопки с параметром shouldStartLoad с запросом.Как бы то ни было, это никогда не вызывается.

Прямо сейчас мой класс называется Tenth.m, и у меня есть этот код в моем контроллере вида

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

NSLog(@" Test spot 1");
NSString* scheme = [[request URL] scheme];
if ([@"didTap" isEqual:scheme]) {
    // Call your method
     NSLog(@" Test spot 2");
    [self didTapButton1];
    return NO;
} else {
     NSLog(@" Test spot 3");
    return YES;
}}

Но я ничего не получаюNSLogs).Я попытался поместить это в свой класс Десятого, и все еще ничего.Я посмотрел на другие примеры и даже скачал один, но он использует только классы viewcontroller и делегатов.Нет третьего класса.

Я заблудился относительно того, почему его не вызывают.

Вот мой третий класс

#import "Tenth.h"


@implementation Tenth

- (void)awakeFromNib
{
[category10 loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.mywebsite.com/api/didtap.php"]]];

}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

- (void)dealloc
{
[super dealloc];
}

- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle
/*
// Implement loadView to create a view hierarchy programmatically, without using a nib.
 - (void)loadView
{
}
*/


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{

 [super viewDidLoad];
}


- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return YES;
}

@end

код удаленной страницы

    <a href="didTap://button1">hello</a>

Десятый.h файл

#import <UIKit/UIKit.h>


@interface Tenth : UIViewController <UIWebViewDelegate> {

IBOutlet UIWebView *category10;

}

-(IBAction)back;
@end

Ответы [ 2 ]

5 голосов
/ 03 октября 2011

Мое первое предположение состоит в том, что в веб-представлении не установлен делегат. Для этого позвонить

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

Класс, содержащий этот метод, должен быть установлен как делегат веб-просмотра. Так что где-то в коде должна быть строка, похожая на webView.delegate = <variable>, где переменная является экземпляром класса, который реализовал метод shouldStartLoadWithRequest:.

Это часто "я", когда webView является подпредставлением представления viewController. Но то, как вы описали свое приложение, я не уверен, будет ли оно self или нет, но похоже, что оно будет не self, а именем экземпляра другого класса.

1 голос
/ 03 октября 2011

Может быть попробовать это:

- (void)viewDidLoad
{
 [super viewDidLoad];

  // Remember to set web view delegate to self.
  category10.delegate = self;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...