Вызов делегата делегата - PullRequest
       4

Вызов делегата делегата

1 голос
/ 08 сентября 2011

Я работаю над проектом iPhone, где унаследовал чужой код.У меня есть ситуация, когда viewController A имеет UIWebView, и он установлен как делегат этого UIWebView.

У меня также есть класс B, который установлен как делегат viewController A.экземпляр BI хочет отправить некоторый javascript с использованием stringByEvaluatingJavaScriptFromString в UIWebView в viewController A.

Каков наилучший способ сделать это?

1 Ответ

2 голосов
/ 08 сентября 2011

Вы можете сделать 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.

...