【问题标题】:Invoke Native code (objectiveC) from UIWebView HTML (JavaScript)从 UIWebView HTML (JavaScript) 调用本机代码 (objectiveC)
【发布时间】:2014-03-21 21:52:21
【问题描述】:

我读过

Invoke method in objective c code from HTML code using UIWebView

他们会

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

这里,我的代码的一个问题是我没有

UIWebView 的委托的 shouldStartLoadWithRequest 方法,因为我只是直接在AppDelegate 中实现 UIWebView,如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{       
    UIWebView *view = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    NSString* path = [[NSBundle mainBundle] pathForResource:@"main" ofType:@"html" inDirectory:@"www"];
    [view loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]];
    view.scalesPageToFit = NO;
    UIViewController *controller = [[UIViewController alloc] init];
    controller.view = view;

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = controller;
    [self.window makeKeyAndVisible];

    return YES;    
}

我喜欢这种方式,因为代码和文件的结构更简单。

所以我的问题是,是否有可能以这种风格实现 call-native-from-webView ?

或者,我需要独立的 UIWebView Controller/Delegate 吗?

如果可能的话,你能告诉我如何做到这一点的例子吗?

我在 ObjectiveC 代码和 MVC 模型方面做得不多,如果你能告诉我方法,我将不胜感激。谢谢。

【问题讨论】:

  • 此代码属于 UIViewController 子类——不是您的应用委托...
  • 是的,我知道。在这里,我的问题是,没有 UIViewController 是否可能。
  • 可以吗?是的。应该是?当然,这取决于。应该在 App Delegate 中完成吗?绝对不是在任何情况下。此外,您为什么不使用情节提要?
  • 有很多理由不使用故事板。不过,在应用程序委托中以这种方式使用通用 UIViewController 没有任何好的理由。
  • 不使用情节提要有一些很好的理由。开始新项目而不使用故事板的理由并不多。尽管如此,还是有原因的。不过默认应该是使用故事板,并且只有在你有充分理由不使用故事板的情况下才不要使用故事板,因此,当人们不使用故事板时,我总是会问为什么不这样做。我看到的大多数人都没有充分的理由。

标签: ios objective-c uiwebview


【解决方案1】:

webView:shouldStartLoadWithRequest:navigationType: 方法将在设置为 webview 委托的任何对象上调用。

【讨论】:

  • 好的,根据您的回答,我感觉我的代码风格是可能的。你可以再详细一点吗?谢谢。对我的代码进行小的修改将不胜感激。
  • webview.delegate = theObjectYouWantToDelegateYourWebViewWhichShouldAbsolutelyNotBeYourAppDelegate_youdDoWellToWorkYourWayThroughACoupleTutorials; 其中变量可以是任何符合UIWebViewDelegate 协议的对象。
  • 对不起,我认为你的答案碎片化了。我必须说,如果我足够成熟,可以猜出结构,我不会问这种问题。
  • 如果您愿意以正确的方式进行操作,我想我会更愿意在整个过程中握住您的手。您应该使用故事板,除非您有充分的理由不这样做,而且您不应该出于任何原因将此特定代码放入您的 App Delegate 中。
  • 好吧,我避免使用storyboards的原因是我认为这是Xcode的一个新特性,我需要依赖Xcode的GUI设计面板。到目前为止,我并不相信这是在应用程序中实现单个 webView 的最佳方式。如果我确信这是做到这一点的唯一方法,我会这样做。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 2014-07-25
  • 1970-01-01
  • 2018-02-06
  • 2013-06-09
相关资源
最近更新 更多