shouldStartLoadWithRequest nicht genannt in meiner iPhone-App
Ich habe einen view-controller mit einem UIWebView-controller. Ich versuche, das javascript in der html-Inhalt der web-Ansicht, um einige Informationen zu meinem objective-c-code. Ich stieß auf eine Reihe von Beispielen, online, set-Fenster.Lage in einer javascript-Funktion und dann fangen die generierten Ereignissen durch setzen der view-controller, um die web-Ansicht zu delegieren und fangen es in der shouldStartLoadWithRequest Funktion. Leider kann ich es nicht zu funktionieren, weil für mich shouldStartLoadWithRequest wird nie aufgerufen, obwohl ich die Einstellung der web-Ansicht delegieren.
Mein code ist wie folgt:
Schnittstelle:
@interface StoryTextViewController : UIViewController <UIWebViewDelegate>
{
IBOutlet UIWebView *storyWebView;
NSString *information;
}
@property (nonatomic, retain) IBOutlet UIWebView *storyWebView;
@property (nonatomic, retain) NSString *information;
@end
In der Schnittstelle, die *Informationen, die variable ist gesetzt, von der früheren Ansicht, dass die Anrufe StoryTextViewController.
Umsetzung:
#import "StoryTextViewController.h"
@implementation StoryTextViewController
@synthesize storyWebView;
@synthesize information;
- (NSString *) contructHTMLText
{
NSString *HTMLText = @"";
NSArray *words = [information componentsSeparatedByString:@" "];
NSString *header =
@"<html>\n"
"<head>\n"
"<script type=\"text/javascript\">\n"
"function marktext(theSpanID)\n"
"{\n"
" var theSpan=document.getElementById(theSpanID);\n"
" if (theSpan.className == \"noHilite\")\n"
" {\n"
" theSpan.className = \"hilite\";\n"
" window.location = \"true\";\n"
" }\n"
" else\n"
" {\n"
" theSpan.className = \"noHilite\";\n"
" window.location = \"false\";\n"
" }\n"
"}\n"
"</script>\n"
"<style type=\"text/css\">\n"
".hilite\n"
"{\n"
" background-color:red;\n"
" color:white;\n"
" font: bold 60px arial,sans-serif\n"
"}\n"
".noHilite\n"
"{\n"
" background-color:white;\n"
" color:black;\n"
" font: 60px arial,sans-serif\n"
"}\n"
"</style>\n"
"</head>\n"
"<body>\n"
"<div class=\"storyText\">\n";
NSString *tailer =
@"</div>\n"
"</body>\n"
"</html>\n";
HTMLText = [HTMLText stringByAppendingString:header];
for (NSInteger i = 0; i < [words count]; i ++)
{
NSString *tag = [NSString stringWithFormat:@" <span id=\"mytext%d\" class=\"noHilite\" onclick=\"marktext(\'mytext%d\')\">%@</span> \n", i, i, (NSString *)[words objectAtIndex:i]];
HTMLText = [HTMLText stringByAppendingString:tag];
}
HTMLText = [HTMLText stringByAppendingString:tailer];
NSLog(HTMLText);
return HTMLText;
}
//The designated initializer. Override to perform setup that is required before the view is loaded.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
storyWebView.delegate = self;
}
return self;
}
//Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *HTMLData = [self contructHTMLText];
[storyWebView loadHTMLString:HTMLData baseURL:[NSURL URLWithString: @""]];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]; //Releases the view if it doesn't have a superview
//Release anything that's not essential, such as cached data
}
- (void)dealloc {
[super dealloc];
}
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
//handle event here
return true;
}
@end
Was passiert ist, dass im Grunde die constructHTML Funktion nimmt den text in die *Informationen, die variable und wickelt jedes Wort im text mit einigen html und javascript, so dass, wenn ein Wort geklickt wird, wird ein css-hoch-Beleuchtung angewendet wird, auf es. Was ich will zu tun ist, um die Anzahl der high-brennende Worte. Ich tun dies, indem Sie versuchen, um pass etwas in der Funktion, das ist immer aufgerufen, wenn ein Wort geklickt, aber wie ich schon sagte, die shouldStartLoadWithRequest Methode das ist, soll geschossen werden, niemals ausgeführt.
Ich habe gesehen, eine Menge Leute tun diese Art der Sache, aber ich kann nicht scheinen, um herauszufinden, warum es nicht läuft für mich
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie setzen Haltepunkt auf Einstellung delegieren
Ich bin mir ziemlich sicher, dass storyWebView nil, in diesem moment.
Kann man es auf diese Weise:
Sollten Sie die Stellvertretung in
viewDidLoad
, nicht ininitWithNibName:bundle:
. Alternativ öffnen Sie Ihre nib-Dateien und control-ziehen Sie von der web-Ansicht, um die Datei-Besitzer, und wählen Sie "delegieren" aus dem drop-down.Sollte nicht
window.location
werden, den Wert der target-URL, die Sie gehen, um? In Ihremmarktext
Funktion sind Sie die Einstellungtrue
oderfalse
.shouldStartLoadWithRequest
wird nur aufgerufen, wenn eine URL-Anforderung empfangen worden ist, und ist etwa, um irgendwohin zu gehen. Nicht sicher, dass das einstellen der Position einer booleschen genug ist, zum auslösen einer navigation. Sie können legen Sie es auf eine magic-URL dann FALSE zurück aus dershouldStartLoadWithRequest
routine, wenn es fragt, um zu navigieren, um die spezifische Magie-URL und verhindern, dass es tatsächlich irgendwo hin. Gültige URLs können dann erlaubt werden, um durch zu gehen.Könnte auch wollen, werfen Sie einen Blick auf die Reaktion auf diese Frage ALSO. Es kann einige timing-Probleme mit
window.location
.Ich sehe auch das problem, denn ich habe den
du solltest besser überprüfen Sie Ihren code, set