我创建了一个我的ViewController(TimeLineViewController)的实例,它将被呈现。这个ViewController包含一个UITableView,它从我的TableViewCell实例中获取单元格。所以ViewController创建了一个TableCellView的实例。 TableViewCell包含一个启用了weblinks的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没有在我发布的代码中获取weblink,我知道该怎么做。这应该不是问题,当我知道,如何解决我的问题。)
感谢您的帮助!如果您有任何疑问,请询问 - 抱歉我的英语不好。
更新: 我做了弗兰克提到的,但我没有工作。我用:
创建了一个WebViewTableCellDelegate.h@protocol WebViewTableCellDelegate
-(void)loadWeb;
@end
然后我在TableViewCell中创建了一个WebViewDelegate的实例变量:
__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中,我使用&lt;&gt;实现了WebViewTableCellDelegate。在我创建单元格的行中,我将所有者设置为self:
TableViewCell *cell = (TableViewCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if(cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"TableViewCell" owner:self options:nil];
cell = tableCell;
}
为什么它不起作用?没有错误警告。
答案 0 :(得分:2)
我会做以下事情:
WebViewTableCellDelegate
协议(查找如何在Apple网站上创建协议)。该协议应包含您的loadWeb:
方法。 UITextView
子类提供类型为<WebViewTableCellDelegate>
的实例变量。self
(TimeLineViewController)。 [delegate loadWeb:request]
loadWeb:
方法接受NSURLRequest
并将其加载到网络视图中。 这应该可以解决问题。
答案 1 :(得分:1)
我不认为在每个单元格中放置UIWebView
是个好主意。考虑一种实现,您只需使用tableView:didSelectRowAtIndexPath:
协议中的UITableViewDelegate
方法在点按特定单元格时显示UIWebView
。