2016-07-04 8 views
0

Ich habe drei UITextfields und einen Absenden-Button. Ich habe die Validierung der Textfelder durchgeführt. Aber der schwierige Teil kommt jetzt. Nachdem ich auf login geklickt habe, muss ich meinen textfields Text an Javascript senden, die Zugangsdaten validieren und nach der Validierung muss meine Ansicht zur nächsten Ansicht wechseln.UIWebView Javascript

- (IBAction) login: (id) sender 
{ 
    if (enableLogin == YES) { 
     // [self loadNextView]; 
    } 
} 

-(void)loadNextView { 

appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; 
if (webViewDidFinishLoadBool == YES) { 
    [appDelegate loginUser: txtfield1.text]; 
    NSLog(@"loadNextView called"); 
} else NSLog(@"loadNextView not called"); 
} 


-(void)sendToJS { 
// NSString* htmlPath = [[NSBundle mainBundle] pathForResource:@"pathtohtml" ofType:@"html"]; 
// NSString* appHtml = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil]; 
// NSURL *baseURL = [NSURL fileURLWithPath:htmlPath]; 
// [self.webview loadHTMLString:appHtml baseURL:baseURL]; 
    NSURLRequest *myReq = [NSURLRequest requestWithURL: 
          [NSURL URLWithString: 
          [NSString stringWithFormat:@"pathtohtml.html"]]]; 
    [self.webview loadRequest:myReq]; 

if (self.webview != nil) { 
    jsCallBack = [NSString stringWithFormat: @"loginUser.login('%@', '%@', '%@');", txtfield1.text, txtfield2.text, txtfield3.text]; 
} 
} 

-(void)webViewDidStartLoad:(UIWebView *)webView { 
    NSLog(@"js loaded"); 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
     [self.webview stringByEvaluatingJavaScriptFromString:jsCallBack]; 
} 

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

    NSString *requestString = [[request URL] absoluteString]; 
    NSArray *components = [requestString componentsSeparatedByString:@":"]; 

    if ([components count] > 1 && 
     [(NSString *)[components objectAtIndex:0] isEqualToString:@"jscall"]) { 
     if([(NSString *)[components objectAtIndex:1] isEqualToString:@"myapp"]) 
     { 
      NSString *urlString = (NSString *)[components objectAtIndex:2]; 

      NSLog(@"URL STRING %@", urlString); 
      if ([urlString isEqual: @"OK"]) { 
       globalValue = YES; 
       webViewDidFinishLoadBool = YES; 
       [self loadNextView]; 
       NSLog(@"is called"); 
      } else NSLog(@"is not called"); 
     } 
     return NO; 
    } 
    return YES; 
} 

Dies wird nicht einmal aufgerufen. Ich habe sogar eine einfache Funktion erstellt, die einen Alarm erzeugt, aber selbst das funktioniert nicht. Ich habe den Webview-Delegaten in viewDidLoad() eingestellt und habe es auch in viewDidAppear() versucht.

Hinweis: Meine Obj C Klassen sind in einem Ordner und meine html und js Dateien sind in 2 separaten Ordnern .. Ich kann die Ordnerstruktur nicht ändern.

+0

Wo verwenden Sie 'jsCallBack' wieder? Ich sehe Sie geben Werte, aber jetzt wieder verwenden –

+0

@Ricardo Alves jsCallBack ist nur zum Laden der Seite ,, – Swift

+0

haben Sie versucht, js auf der Seite hinzuzufügen. auf diese Weise können Sie das Ereignis auf der Schaltfläche erstellen –

Antwort

0

Ich aktualisiere die Webansicht einmal "enableLogin" wird wahr.