呼叫代表的代表

时间:2011-09-08 16:17:25

标签: iphone ios delegates uiwebviewdelegate

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

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

在B的实例中,我想使用stringByEvaluatingJavaScriptFromString将一些javascript发送到viewController A中的UIWebView。

最好的方法是什么?

1 个答案:

答案 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上进行了更改。