Objective c 目标C:使用委托调用父类中的函数
我正在创建一个三层导航弹出控制器,在第三个弹出控制器上,我有一个委托方法来访问父类中的dismissPopup方法。我似乎无法调用它,父类中的函数中的NSLog消息甚至没有显示,因此我一定是使用了错误的委托,或者调用了错误的委托 3类ParentViewController有一个工具栏,工具栏上有一个按钮,用于打开表视图-->区域ViewController是第一个带有项目-->ConusViewController的表视图控制器,是推送到导航堆栈上的第二个表视图控制器。我试图在点击选择后调用父方法中的dismissPopover方法,该方法带有一个委托,这样整个popover就会消失 在ConusViewController中,如果委托有效,我会看到从父类中的函数访问“方法”。它没有显示,所以我一定是用错了授权 很抱歉在我的帖子上这么罗嗦,我想完整地说明我在这里要做的事情。谢谢 ParentViewController.h RegionViewController.m ConusViewController.hObjective c 目标C:使用委托调用父类中的函数,objective-c,methods,delegation,Objective C,Methods,Delegation,我正在创建一个三层导航弹出控制器,在第三个弹出控制器上,我有一个委托方法来访问父类中的dismissPopup方法。我似乎无法调用它,父类中的函数中的NSLog消息甚至没有显示,因此我一定是使用了错误的委托,或者调用了错误的委托 3类ParentViewController有一个工具栏,工具栏上有一个按钮,用于打开表视图-->区域ViewController是第一个带有项目-->ConusViewController的表视图控制器,是推送到导航堆栈上的第二个表视图控制器。我试图在点击选择后调用父
不确定是否错过了,但我从未看到您在ConusViewController中设置委托属性。需要设置为要委托给的对象的实例(其中实现了dismissPopover的对象)。在调用
[delegate dismissPopover]
之前,检查是否实际设置了委托。可能不是
我在ParentViewController.m中看到,您创建了ConusViewController的一个实例并设置了它的委托,但从未显示它。在RegionViewController.m中,您可以创建ConusViewController的另一个实例,而不设置其委托,该实例似乎正在显示
#import <UIKit/UIKit.h>
#import "ConusViewController.h"
@interface EnscoWXViewController : UIViewController <ConusViewControllerDelegate> {
UIPopoverController *popoverController;
IBOutlet UIWebView *webImageDisplay;
ConusViewController *cViewController;
}
@property (nonatomic, retain) UIPopoverController *popoverController;
@property (nonatomic, retain) UIWebView *webImageDisplay;
@property (nonatomic, retain) ConusViewController *cViewController;
-(IBAction) buttonShowRegion:(id) sender;
@end
#import "ParentViewController.h"
#import "RegionViewController.h"
@implementation ParentViewController
@synthesize cViewController;
-(IBAction) buttonShowRegion:(id) sender {
...
}
-(void)dismissPopover {
[popoverController dismissPopoverAnimated:YES];
printf("Method Accessed\n");
}
- (void)viewDidLoad {
cViewController = [[ConusViewController alloc] init];
cViewController.delegate = self;
[super viewDidLoad];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
switch (indexPath.row) {
case 0: {
ConusViewController *conusViewController = [[ConusViewController alloc] initWithNibName:@"ConusViewController" bundle:nil];
conusViewController.contentSizeForViewInPopover = CGSizeMake(320, 350);
[self.navigationController pushViewController:conusViewController animated:YES];
[conusViewController release];
break;
}
case 1: {
break;
}
}
}
#import <UIKit/UIKit.h>
@protocol ConusViewControllerDelegate <NSObject>
@required
- (void)dismissPopover;
@end
@interface ConusViewController : UITableViewController {
NSMutableArray *conusItems;
id delegate;
}
@property (nonatomic, assign) id <ConusViewControllerDelegate> delegate ;
@end
#import "ConusViewController.h"
#import "ParentWXViewController.h"
@implementation ConusViewController
@synthesize delegate;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *itemRequested = [conusItems objectAtIndex:indexPath.row];
NSLog(@"logging: %@", itemRequested);
[delegate dismissPopover];
[itemRequested release];
}