在我的iPhone应用程序中,我有多个类文件,我有我的主应用程序的类文件,然后我有我的UIView类文件。我在我的UIView类文件中声明了一个简单的 - (void)方法,如何从主应用程序类文件中访问它?
更详细一点:在我的应用程序中播放视频,当此视频播放完毕后发送通知并执行操作,我已成功设置,但是当电影结束时我想要一个声明的方法另一个要执行的类文件。如果方法是在同一个类文件中声明的,我只需使用这段代码:[self mySimpleVoidMethod];但显然这不起作用如果方法是在不同的类文件中声明的。我相信可以访问在不同的类文件中声明的方法,但我还没有得到关于如何做到这一点的线索。对不起,如果我使用完全错误的术语来命名。但我对所有人一起编程都比较新。
答案 0 :(得分:3)
根据您的设置,您有几个选项。以下是一些:
1)使用函数(被调用者)作为调用者类中的属性添加对类的引用:
Caller.h
@interface Caller : SomeObject {
Callee *myCallee;
...
}
@property(nonatomic, retain) Callee *myCallee;
Caller.m
@synthesize myCallee;
-(void)someAction {
[myCallee doSomething];
}
初始化两个类后设置调用者的东西:
caller.myCallee = callee;
2)使用另一个通知事件,就好像你已经知道该怎么做。
3)如果你有许多不同的类,Caller可能需要调用所有类支持相同的方法,请使用协议:
DoesSomething.h
@protocol DoesSomething
-(void)doSomething;
@end
Callee.h
@interface Callee : NSObject<DoesSomething> { // NSObject or whatever you're using...
...
}
-(void)doSomething;
Caller.h
@interface Caller : SomeObject {
id<DoesSomething> *myCallee;
...
}
@property(nonatomic, retain) id<DoesSomething> *myCallee;
......然后按照例子1。
4)使用performSelector向班级发送消息。
Caller.h
@interface Caller : NSObject {
SEL action;
id callee;
}
-(void)setupCallbackFor:(id)target action:(SEL)callback;
Caller.m
-(void)setupCallbackFor:(id)target action:(SEL)callback {
callee = target;
action = callback;
}
-(void)someAction {
if([callee respondsToSelector:action]) {
[callee performSelector:action];
}
我确信还有其他方法,这些方法各有利弊,但其中的内容应符合您的需求和/或给您足够的扫描文档以填补空白...... < / p>
答案 1 :(得分:1)
几周前我做了一篇博客文章,概述了一种方法。它与之前的答案类似,包括一些您可以下载和查看的示例代码。它基于使用表视图控制器,但您应该能够轻松地将这些想法调整到您的应用程序中。
答案 2 :(得分:0)
您需要另一个类的实例,可以从电影结束时运行的代码访问。通常,这是通过将另一个类的实例存储为类中的字段,通过“setter”或在构造期间设置来实现的。您还可以使用key-value observing,观看代表电影播放状态的键;另一个类的实例可以注册以观察对该键的更改。
特别是对于使用UIView的模式,视图的UIViewController可以访问它(通过view
方法)。如果你的“主应用程序的类文件”有一个指向控制器的指针 - 它们可能会通过Interface Builder进行设置 - 那么这是一种简单的方法来访问UIView实例。