iphone - 调用委托(delegate)的委托(delegate)

标签 iphone ios delegates uiwebviewdelegate

我正在从事一个 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/

相关文章:

ios - 钛错误 : Could not find module localeStrings for architecture i386

android - 如何更改App签名?

iphone - 在iphone中创建一个单独的单元测试项目

iphone - 如何使用xmpp框架仅列出facebook上的在线用户

iphone - 将在 Interface Builder 中创建的 UITabBarController 设置为委托(delegate)

c# - 允许客户端委托(delegate)覆盖默认行为的模式

ios - 自定义 UITableViewCell 中的 UITextField 意外发现为 nil

iphone - 如何为 UIWebView 中的文本设置高亮颜色?

iphone - 如何使用 NSDate 构建一个 NSPredicate 过滤一个月中的所有天数?

iphone - 如何在 Interface Builder 中构建 Root View 的 subview ?