我正在开发一个iPhone项目,我继承了别人的代码。我有一种情况,其中viewController A有一个UIWebView,它被设置为该UIWebView的委托。
我还有一个B类,它被设置为viewController A的代表。
在B的实例中,我想使用stringByEvaluatingJavaScriptFromString将一些javascript发送到viewController A中的UIWebView。
最好的方法是什么?
答案 0 :(得分:2)
你可以让viewController A成为B类的委托,这样你就可以从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
操作UIElements应留给拥有UIElement的视图控制器,因此我建议使用委托。通过引用viewController A,您可以直接操作UIWebView,但我强烈建议不要这样做。使用这样的代码,谁知道其他类也在UIElements上进行了更改。