![](/img/trans.png)
[英]Not able to create instance for viewcontroller in other viewcontrollers in Swift
[英]How can an instance of an UITableViewCell, which was created by an instance of my ViewControllers, tell the ViewController, to do something?
我创建了ViewController(TimeLineViewController)的实例,该实例将被呈现。 这个ViewController包含一个UITableView,它从我的TableViewCell实例获取单元格。 因此,ViewController将创建TableCellView的实例。 TableViewCell包含具有启用的Web链接的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
}
现在,我希望通过单击Web链接来显示一个新的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在我发布的代码中没有Web链接,而且我知道该怎么做。当我知道如何解决问题时,这不应该是问题。)
谢谢你的帮助! 如有疑问,请问-对不起,我的英语不好。
更新 :我做了弗兰克所说的,但是我没有用。 我用以下命令创建了一个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中,我用<>实现了WebViewTableCellDelegate,并在创建单元的那一行中,将所有者设置为self:
TableViewCell *cell = (TableViewCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if(cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"TableViewCell" owner:self options:nil];
cell = tableCell;
}
为什么不起作用? 没有错误警告。
我将执行以下操作:
WebViewTableCellDelegate
协议(在Apple网站上查找如何创建协议)。 该协议应包含您的loadWeb:
方法。 UITextView
子类提供一个<WebViewTableCellDelegate>
类型的实例变量。 self
(TimeLineViewController)。 [delegate loadWeb:request]
loadWeb:
方法接受一个NSURLRequest
并将其加载到Web视图中。 这应该够了吧。
我认为在每个单元格中放置UIWebView
不是一个好主意。 考虑一个实现,在该实现中,您可以简单地利用UITableViewDelegate
协议中的tableView:didSelectRowAtIndexPath:
方法来显示特定的单元格时显示的UIWebView
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.