Динамические методы UIWebView <UIWebViewDelegate> не вызываются, даже если делегат установлен и регистрируется
Я звоню UIView
(создание и добавление в стек) динамически из NSObject
класс, который обрабатывает "сбор данных" из различных источников в UIViewController
для UIView
Я только что создал. UiViewController
принимает данные (которые возвращаются как HTML
а также CSS
) и присваивает его UIWebview
- и все это прекрасно работает и выглядит великолепно.
Весь смысл всего этого, это отправить веб-страницу на принтер. Но методы печати не запускаются в UIViewController
выше, потому что они находятся в UIWebViewDelegate
методы. Я должен ждать его загрузки:
-(void)webViewDidFinishLoad:(UIWebView *)webView{
DLog(@"WEB VIEW LOADED!!");
if ([[self.webview stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"]) {
UIImage *image = [self imageFromWebview:self.webview];
DLog(@"FINISHED!!");
for (NSDictionary *printer in self.existingPrinters) {
//Print here
}
}
}
}
Это то, что я сделал, что не сработало:
(У меня есть <UIWebViewDelegate>
в.h файле webview
это синтезированный сильный (я тоже пытался сохранить), неатомное свойство)
Первым делом я попытался назначить делегата на веб-просмотр в viewWillAppear
метод, то я впоследствии попробовал viewDidAppear
а также viewDidLoad
; установив делегата так self.webview.delegate = self;
и (я тоже пробовал) [self.webview setDelegate:self];
Затем я попытался сделать .xib
файл и вызов представления таким образом; прикрепление веб-вида к files owner
и установка делегата в застройщике.
WebViewPrintViewController *printerController = (WebViewPrintViewController *)[[WebViewPrintViewController alloc]initWithNibName:@"WebViewPrintViewController" bundle:[NSBundle mainBundle]];
Я даже пытался установить делегата от NSObject
учебный класс:
[webPrintVC.webview setDelegate:webPrintVC];
Затем я попытался использовать StoryBoard
называя представление "долгий путь"
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
WebViewPrintViewController *myVC = (WebViewPrintViewController *)[storyboard instantiateViewControllerWithIdentifier:@"WebViewPrintController"];
... каждый раз, когда вызывается представление, а методы делегата веб-просмотра - нет!
Я даже пытался добавить sleep(2);
различные методы, чтобы увидеть, могу ли я заставить View ждать viewController в другом потоке, используя различные dispatch_async
/ основные комбинации потоков...
-(void)viewDidAppear:(BOOL)animated{
DLog(@"VIEW DID APPEAR!");
//self.webview.frame = CGRectMake(self.webview.frame.origin.x, self.webview.frame.origin.y-self.webview.frame.size.height-25, self.webview.frame.size.width, self.webview.frame.size.height);
self.webview.delegate = self;
[self.view setNeedsDisplay]; //another desperate attempt to evoke the delegate methods
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:YES];
self.webview.delegate = self;
[self.webview loadHTMLString:HTML baseURL: nil];
[self.view addSubview:self.webview];
DLog(@"VIEW WILL APPEAR!");
}
Также, когда я использую .xib
файл делегата установлен, как видно из этого Dlog
заявление:
DLog(@"WEBVIEWCONTROLLER LOADED!!! WHATS THE DELEGATE OF THE WEB VIEW : %@ THIS IS SELF : %@", self.webview.delegate, self);
Это результат:
2014-07-11 08:32:21.708 pos[14292:60b] -[WebViewPrintViewController viewDidLoad] [Line 54] WEBVIEWCONTROLLER LOADED!!! WHATS THE DELEGATE OF THE WEB VIEW : <WebViewPrintViewController: 0xc202c0> THIS IS SELF : <WebViewPrintViewController: 0xc202c0>
Я в растерянности... кто-нибудь может помочь?
Мне нужно получить UIWebViewDelegate
методы работы. Спасибо!
Кит