2010-10-23 89 views
0

我正在創建一個自定義類,它是UIWebview的子類。但是它的委託功能沒有被調用。我應該如何設置這個類的代表。我知道這是一個基本問題,但如果有人能回答這個問題,這將是非常好的。提前致謝。設置自定義類的代理

我的代碼:

.h文件中

@interface PollackWebView : UIWebView<UIWebViewDelegate> { 



} 

-(id)initWebview:(CGRect)frame; 
@end 

.m文件:

@implementation PollackWebView 


-(id)initWebview:(CGRect)frame { 

    if ((self = [super initWithFrame:frame])) { 

    } 
    return self; 
} 

-(void)SetMyDelegate { 

    self.delegate = self; 

} 


- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 

    NSLog(@"shouldStartLoadWithRequest"); 
    if (navigationType == UIWebViewNavigationTypeLinkClicked) { 

     // do something with [request URL] 
     return NO; 
    } 

    return TRUE; 

} 

- (void)webViewDidStartLoad:(UIWebView *)webView { 

    NSLog(@"webViewDidStartLoad"); 

} 
+0

根本沒有設置委託對象。這些方法不能被調用。我在下面的答案已經說明了要做什麼。順便說一句:你不應該在視圖類中實現委託方法。這與模型視圖控制器範例相矛盾。 – 2010-10-23 13:38:32

+0

多數民衆贊成我問你,如何設置委託對象 – pankaj 2010-10-23 13:42:27

+0

okk它現在完成它的工作 – pankaj 2010-10-23 13:44:44

回答

3

我覺得你的努力去做,你不需要一個子類。在您發佈的代碼中,您只使用委託方法,因此不是創建子類:

  • 只需使用普通的UIWebView即可。
  • 在創建並使WebView可見的類中,在您使用Alloc/init UIWebView之後,將UIWebView的委託設置爲self
  • 然後在創建類的頭/使可見的WebView添加<UIWebViewDelegate>@interface線的末端,就在{
  • 然後放在類的實現委託方法。
+0

我知道n已經做了很多次,但現在我想這樣做... n其工作正常..謝謝評論 – pankaj 2010-10-23 13:46:45

+0

設置'self.delegate = self'是一個跡象表明某件事情是錯誤的。代表的整個想法是將責任委託給*別的東西*。你剛剛做的是打破Cocoa的核心原則,只會導致更多的麻煩。 – PeyloW 2010-10-23 14:10:46

+2

+1。在大多數情況下,如果您繼承基礎類或UIWebView之類的東西,則應該考慮一下您的設計。 「使用」更爲常見,通常Cocoa應用程序中的設計更好。 – 2010-10-23 14:22:46