Ios 在目标c中使用类层次结构时,如何从超类调用子类方法
这是我的代码:Ios 在目标c中使用类层次结构时,如何从超类调用子类方法,ios,objective-c,cocoa-touch,protocols,Ios,Objective C,Cocoa Touch,Protocols,这是我的代码: @interface RootViewController : UIViewController{ } -(IBAction)btnDetail1_Clicked:(id)sender; @end @implementation RootViewController -(IBAction)btnDetail1_Clicked:(id)sender{ DetailViewController1 *mvcr = [[DetailViewController1 all
@interface RootViewController : UIViewController{
}
-(IBAction)btnDetail1_Clicked:(id)sender;
@end
@implementation RootViewController
-(IBAction)btnDetail1_Clicked:(id)sender{
DetailViewController1 *mvcr = [[DetailViewController1 alloc] initWithNibName:@"DetailViewController1" bundle:nil];
[mvcr setDelegate:self];
[self.navigationController pushViewController:mvcr animated:YES];
[mvcr release];
}
@end
@protocol NotifySubclass
@optional
-(void) serviceCall_done;
@end
@interface MasterViewController : UIViewController{
id<NotifySubclass> delegate;
}
@property (retain) id delegate;
-(void) initCallService;
@end
@implementation MasterViewController
@synthesize delegate;
-(void) initCallService{
"My some other code is here."
[self performSelector:@selector(startLoading) withObject:nil afterDelay:5];
}
-(void) startLoading{
"My some other code is here."
[self performSelectorOnMainThread:@selector(loadComplete) withObject:nil waitUntilDone:YES];
}
-(void) loadComplete{
"I want to call DetailViewController1's "serviceCall_done" method from here.
[delegate serviceCall_done];
}
@end
@interface DetailViewController1 : MasterViewController <NotifySubclass>{
}
@end
@implementation DetailViewController1
- (void)viewDidLoad{
[self initCallService];
}
-(void) serviceCall_done{
}
@end
@接口RootViewController:UIViewController{
}
-(iAction)btnDetail1_单击:(id)发件人;
@结束
@RootViewController的实现
-(iAction)btnDetail1\u已单击:(id)发件人{
DetailViewController1*mvcr=[[DetailViewController1 alloc]initWithNibName:@“DetailViewController1”bundle:nil];
[mvcr setDelegate:self];
[self.navigationController pushViewController:mvcr动画:是];
[mvcr发布];
}
@结束
@协议子类
@可选的
-(无效)服务呼叫完成;
@结束
@界面MasterViewController:UIViewController{
id代表;
}
@属性(保留)id委托;
-(无效)初始服务;
@结束
@主视图控制器的实现
@综合代表;
-(void)initCallService{
“我的一些其他代码在这里。”
[自执行选择器:@选择器(惊人加载),对象:零延时:5];
}
-(空)惊人的{
“我的一些其他代码在这里。”
[self-performSelectorOnMainThread:@selector(loadComplete)with object:nil waitUntilDone:YES];
}
-(无效)加载完成{
我想从这里调用DetailViewController1的“serviceCall\u done”方法。
[代理服务呼叫完成];
}
@结束
@界面详细信息ViewController 1:MasterViewController{
}
@结束
@实现细节视图控制器1
-(无效)viewDidLoad{
[自助服务];
}
-(无效)服务呼叫完成{
}
@结束
我想从LoadCompetite
主视图控制器的方法调用DetailViewController1
的serviceCall\u done
方法
我曾尝试创建协议,但在从RootViewController
调用DetailViewController1
时,没有找到编写协议的确切位置
有人能为我提供这方面的指导吗?您可以使用NSNotificationCenter发布此通知,并在所有3个详细信息类中添加观察者。阅读一些有关NSNotificationCenter的教程
这里有一些教程
在MasterViewController
-(void) serviceCall_done{
//in this method you do nothing.
}
修改
-(void) loadComplete{
[self serviceCall_done];
}
然后,在DetailViewController1
中覆盖此方法serviceCall\u done
-(void) serviceCall_done{
//Add code
}
通过谈论通知“子类”和“超类”,您混淆了您的问题(和代码)“。这个问题与类继承没有任何关系;您只需要在主控制器中引用详细控制器。是否有某个对象知道这两个方面,可能是您的根视图控制器?@jrturton我有多个detailviewcontroller,如DetailViewController1、DetailViewController2、DetailViewController3等。它们都是MasterViewController的子类。通知哪个detailviewcontroller我将管理,但如何通知我正在询问。你能详细解释一下吗?我希望苹果公司能对单词retain
和delegate
作为单个表达式的一部分发出警告。@a-Live,我想如果编译器能发出警告就足够了。我不希望苹果打电话给我:)谢谢拉胡尔·维亚斯的回答。这对我有帮助。