![](/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.