1

我正在开发一个继承了别人代码的 iPhone 项目。我有一种情况,viewController A 有一个 UIWebView,它被设置为那个 UIWebView 的委托。

我还有一个 B 类,它被设置为 viewController A 的代表。

在 BI 实例中,希望使用 stringByEvaluatingJavaScriptFromString 将一些 javascript 发送到 viewController A 中的 UIWebView。

最好的方法是什么?

4

1 回答 1

2

您可以使 viewController A 成为 Class B 的委托,以便从 Class B 中您可以调用 viewController A 上的方法,然后 UIWebView 可以执行所需的 javascript。

@protocol ClassBDelegate
- (void) executeJavascript:(NSString*)jsString;
@end

@interface ClassB : NSObject<ViewControllerADelegate>
@property (nonatomic, assign) id<ClassBDelegate> delegate;
@end

@implementation ClassB
- (void) myFunc
{
   ...
   [self.delegate executeJavascript:@"alert('Awesome!');"];
}
@end

上面缺少一些东西,例如您的 B 类实例将其委托属性分配给 viewControllerA。

你还需要类似的东西:

@interface ClassA : UIViewController<ClassBDelegate>
...
- (void) executeJavascript:(NSString*)jsString;
@end

@implementation ClassA
...
- (void) executeJavascript:(NSString*)jsString
{
   [self.myWebView stringByEvaluatingJavaScriptFromString:jsString];
}
@end

操作 UIElement 应该留给拥有 UIElement 的视图控制器,因此我建议使用委托。通过对 viewController A 的引用,您可以直接操作 UIWebView,但我强烈建议您不要这样做。有了这样的代码,谁知道还有哪些其他类也在对 UIElements 进行更改。

于 2011-09-08T16:37:22.627 回答