Я создал экземпляр моего ViewController (TimeLineViewController), который будет представлен. Этот ViewController содержит UITableView, который получает ячейки из экземпляра моего TableViewCell. Таким образом, ViewController создает экземпляр TableCellView.
TableViewCell содержит UITextView с включенными веб-ссылками. Теперь я хочу отключить функцию, которую открывает Safari. Я сделал подкласс UITextView и:
- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id < WebPolicyDecisionListener >)listener
{ NSLog(@"request: %@", request); //Console shows the link
}
Теперь я хочу, чтобы при нажатии на веб-ссылку появился новый ViewController (WebViewController). Проблема в том, что TableViewCell не может «открыть» новый ViewController. Итак, я попробовал это:
В TableViewCell:
- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id < WebPolicyDecisionListener >)listener
{ NSLog(@"request: %@", request);
TimeLineViewController * web = [[TimeLineViewController alloc]init];
[web loadView];
}
А в ViewController:
- (void)loadWeb{
WebViewController *lust = [[WebViewController alloc] initWithNibName:nil bundle:nil];
lust.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:lust animated:YES];
[lust release];
}
Проблема в том, что он всегда просто перезагружает TimeLineViewController, но не загружает WebViewController. Зачем? Как я могу это исправить?
(Я знаю, что WebViewController не получает ссылку в моем опубликованном коде, и я знаю, как это сделать. Когда я знаю, как решить мою проблему, это не должно быть проблемой.)
Спасибо за вашу помощь! Если у вас есть вопросы, просто спросите - извините за мой плохой английский.
UPDATE :
Я сделал то, что Фрэнк упоминает, но я не работаю. Я создал WebViewTableCellDelegate.h с:
@protocol WebViewTableCellDelegate
-(void)loadWeb;
@end
Затем я создал переменную экземпляра WebViewDelegate в TableViewCell:
__weak NSObject <WebViewTableCellDelegate> *_delegate;
и в .m:
@interface UITextView (Override)
@end
@class WebView, WebFrame;
@protocol WebPolicyDecisionListener;
@implementation UITextView (Override)
- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id < WebPolicyDecisionListener >)listener
{ NSLog(@"request: %@", request);
[_delegate loadWeb];
}
@end
В моем TimeLineViewController я реализовал WebViewTableCellDelegate с помощью <> и в строке, где я создаю ячейки, я установил для владельца значение self:
TableViewCell *cell = (TableViewCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if(cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"TableViewCell" owner:self options:nil];
cell = tableCell;
}
Почему это не работает? Нет предупреждения об ошибке.