2011-03-08 26 views
0

我是新來的Objective C,我無法讓委託在我的代碼中工作。從彈出窗口類調用委託方法

我有一個名爲cViewController的類,在這個類中有一個UIWebView來獲取網頁和它上面的一個按鈕,它調用一個名爲prodMenu的彈出類。我遇到的麻煩是,從prodMenu類調用網頁並將其顯示在父UIWebView上的功能不起作用。

cViewController.h

#import <UIKit/UIKit.h> 
#import "prodMenu.h" 

@interface cViewController : UIViewController <prodMenuDelegate>{ 
    UIPopoverController *cpopover; 
    IBOutlet UIWebView *webImageDisplay; 
} 
@property (nonatomic, retain) UIWebView *webImageDisplay; 
@property (nonatomic, retain) UIPopoverController *cpopover; 
- (IBAction)cPopoverTapped:(id)sender; 
- (void) fetchWebsite:(NSString *)website; //This is the delegate method I'm trying to call in the popover class. 
@end 

cViewController.m

- (IBAction)cPopoverTapped:(id)sender { 
    prodMenu *tp = [[prodMenu alloc] init]; 
    cpopover = [[UIPopoverController alloc] initWithContentViewController:tp]; 
    [tp release]; 
    CGRect rect = CGRectMake(40, 0, 50, 50); 
    cpopover.popoverContentSize = CGSizeMake(250, 225); 
    [cpopover presentPopoverFromRect:rect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
} 

- (void)fetchWebsite:(NSString*)website{ //This function is called by prodMenu class 
    NSLog(@"address: %@", website); 
    NSString *urlAddress = website; 
    NSURL *url = [NSURL URLWithString:urlAddress]; 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
    [webImageDisplay loadRequest:requestObj]; 
    [webImageDisplay release]; 
} 

- (void)viewDidLoad { 
    [self fetchWebsite:@"http://www.yahoo.com"]; 
    [super viewDidLoad]; 
} 

prodMenu.h

#import <UIKit/UIKit.h> 
@protocol prodMenuDelegate; 

@interface prodMenu : UIViewController{ 
    <prodMenuDelegate> delegate; 
} 
- (IBAction)radBtn:(id)sender; //This is the IBAction that calls the fetchWebsite function 
@property (nonatomic, assign) id <prodMenuDelegate> delegate; 
@end 

@protocol prodMenuDelegate 
- (void)fetchWebsite:(NSString *)website; 
@end 

prodMenu.m

#import "prodMenu.h" 
#import "cViewController.h" 

@implementation prodMenu 
@synthesize delegate; 

- (IBAction)radBtn:(id)sender{ 
    [delegate fetchWebsite:@"http://www.google.com"]; //Here is the call to the method 
} 

我失去了一些東西在這裏調用委託方法?沒有任何錯誤或警告。我想要做的就是當用戶在彈出視圖上按下按鈕時,下面的父類會更改網頁。提前致謝。

+0

prodMenu的實例在哪裏?這就是將cViewController實例分配給「委託」屬性的地方。 – 2011-03-08 15:11:10

+0

對不起,添加了prodMenu的實例 – 2011-03-08 15:37:42

回答

1

只是一個快速的想法。您是否試過宣佈這樣的代理協議

@protocol prodMenuDelegate <NSObject> 
    ... 
@end 

?我忽略了< NSObject>時經常遇到麻煩。此外,我覺得有一個「身份證」在

@interface prodMenu : UIViewController{ 
    <prodMenuDelegate> delegate; 
} 

編輯丟失:另外,在代碼中你貼我沒有看到你實際分配prodMenu的委託。

+0

非常感謝,我真的錯過了prodMenu的委託任務。我只需要一行「tp.delegate = self;」當啓動cPopoverTapped IBAction時。現在運行良好,再次感謝。 – 2011-03-08 16:57:30

相關問題