Вызов метода делегата из класса popover - PullRequest
0 голосов
/ 08 марта 2011

Я новичок в Objective C и у меня проблемы с тем, чтобы заставить делегатов работать в моем коде.

У меня есть класс с именем cViewController, и в этом классе есть UIWebView для выборки веб-страниц и кнопка над ним, которая вызывает класс popover, называемый 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
}

Я что-то здесь упускаю для вызова метода делегата? Там нет никаких ошибок или предупреждений. Все, что я хочу сделать, это когда пользователь нажимает кнопку в представлении popover, родительский класс внизу изменяет веб-страницу. Заранее спасибо.

1 Ответ

1 голос
/ 08 марта 2011

Просто быстрая идея.Вы пытались объявить протокол делегата следующим образом

@protocol prodMenuDelegate <NSObject>
    ...
@end

?Я часто сталкивался с проблемами при пропуске .Кроме того, я думаю, что в

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

отсутствует пропущенный идентификатор. Редактировать: Кроме того, в опубликованном вами коде я не вижу, где вы фактически назначаете делегата prodMenu.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...