1

私は、他の誰かのコードを継承した iPhone プロジェクトに取り組んでいます。viewController A に UIWebView があり、その UIWebView のデリゲートとして設定されている状況があります。

また、viewController A のデリゲートとして設定されたクラス B もあります。

BI のインスタンスで、stringByEvaluatingJavaScriptFromString を使用して JavaScript を viewController A の UIWebView に送信したいと考えています。

それを行う最良の方法は何ですか?

4

1 に答える 1

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

UIElement の操作は、UIElement を所有するビュー コントローラーに任せる必要があるため、デリゲートの使用を提案します。viewController A を参照することで、UIWebView を直接操作できますが、これには強くお勧めしません。このようなコードが進行していると、他のクラスが UIElements に変更を加えていることを誰が知っているでしょうか。

于 2011-09-08T16:37:22.627 に答える