我正在从事一个 iPhone 项目,我继承了其他人的代码。我遇到这样一种情况,viewController A 有一个 UIWebView,它被设置为该 UIWebView 的委托(delegate)。
我还有一个 B 类,它被设置为 viewController A 的委托(delegate)。
在 B 的一个实例中,我想使用 stringByEvaluatingJavaScriptFromString 将一些 javascript 发送到 viewController A 中的 UIWebView。
最好的方法是什么?
最佳答案
您可以使 viewController A 成为 B 类的委托(delegate),这样您就可以从 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 的实例将它的委托(delegate)属性分配给了 viewControllerA。
你还需要这样的东西:
@interface ClassA : UIViewController<ClassBDelegate>
...
- (void) executeJavascript:(NSString*)jsString;
@end
@implementation ClassA
...
- (void) executeJavascript:(NSString*)jsString
{
[self.myWebView stringByEvaluatingJavaScriptFromString:jsString];
}
@end
应将 UIElement 的操作留给拥有 UIElement 的 View Controller ,因此我建议使用委托(delegate)。通过引用 viewController A,您可以直接操作 UIWebView,但我强烈建议不要这样做。像这样的代码,谁知道还有哪些其他类也在对 UIElement 进行更改。
关于iphone - 调用委托(delegate)的委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7351273/