2012-03-16 171 views
7

这是一个非常基本的问题,但我已经找遍了,并一直无法找到解释不够好,我绕过它我的头一个答案。如何从一个类在另一个(IOS)调用方法

我想要做的是在一个类中我iOS应用程序的创建方法,然后再调用其他类,方法在我的应用程序。有人能够解释我需要做什么来实现这一目标吗?任何帮助将不胜感激,因为我迄今为止的所有尝试都失败了!

谢谢。

+2

我觉得你的问题有点含糊。您将在任何基本应用程序中完成此操作。即。调用对象的方法。你可以给代码示例显示你正在尝试做什么? – drekka 2012-03-16 02:47:22

+0

您可以使用NSNotificationCenter或委托或您的自定义协议.... – 2013-09-26 13:27:25

回答

43

的Objective-C:

你必须导入包含您要使用的方法的类的头(ClassYouWantToUse.h)到你想使用它的类(TargetClass)。

的TargetClass.h或TargetClass.m内(取决于你的范围想给它):

#import "ClassYouWantToUse.h" 

然后创建要目标类无论是作为内部使用类的一个实例属性是这样的:

@property (nonatomic,strong) ClassYouWantToUse *classObject; 

或实例变量是这样的:

ClassYouWantToUse *classObject; 

确保你初始化它! (平日里的viewDidLoad):

classObject = [[ClassYouWantToUse alloc] init]; 

现在,你甚至可以从该类任何公开的方法是这样的:

[classObject theClassMethodWithParam:param1 andSecondParam:param2]; 

注:的ClassYouWantToUse类中必须有你想访问的方法通过在头文件中声明:

- (void)theClassMethodWithParam:(UIImage*)someImage andSecondParam:(NSString*)someText; 

否则,您将无法看到这些方法。


斯威夫特:

即使世界真的没有什么特别的地方在迅速,只需添加此作为参考。

在SWIFT只需创建您要使用的类的实例:

let classObject = ClassYouWantToUse() 

,并直接使用它:

classObject.theClassMethodWithParam(param1, andSecondParam:param2) 
+0

谢谢**所以**多!你无法想象我已阅读了多少篇帖子,试图找出答案。正如我现在想要的那样工作! – 2012-03-16 12:21:39

+0

路易斯·奥斯卡,你美丽的男人! – Ian 2013-02-22 17:23:00

+0

好奇,现在有两个ClassToBeUsed实例的正确解决方案是什么?因为*类与ClassToBeUsed中的自我背向不一样?所以在这个例子中,如果我从[something somethingWithParam:blabla andSecondParam:otherbla]引用self,它会引用* something。如果我需要引用ClassToBeUsed的原始实例,该怎么办? – rick 2013-07-12 01:26:37

3

你有两个基本的选择。您可以创建或第一类的实例传递到第二类,也可以添加一个静态方法来第一类和直接使用类对象调用它。

举例来说,假设你有:

@interface ClassA : NSObject { 
} 

//instance methods 
- (int) addNumber:(int)num1 withNumber:(int)num2; 

//static/class methods 
+ (int) add:(int)num1 with:(int)num2; 
@end 

@implementation ClassA 
- (int) addNumber:(int)num1 withNumber:(int)num2 { 
    return num1 + num2; 
} 

+ (int) add:(int)num1 with:(int)num2 { 
    return num1 + num2; 
} 
@end 

然后,你可以这样做:

#import "ClassA.h" 

@interface ClassB : NSObject { 
    ClassA* adder; 
} 

//constructors 
- (id) init; //creates a new instance of ClassA to use 
- (id) initWithAdder:(ClassA*)theAdder; //uses the provided instance of ClassA 

//instance methods 
- (int) add2To:(int)num; 

//static/class methods 
+ (int) add3To:(int)num; 
@end 

@implementation ClassB 
- (id) init { 
    if (self = [super init]) { 
     adder = [[ClassA alloc] init]; 
    } 
    return self; 
} 

- (id) initWithAdder:(ClassA*)theAdder { 
    if (self = [super init]) { 
     adder = theAdder; 
    } 
    return self; 
} 

- (int) add2To:(int)num { 
    return [adder addNumber:2 withNumber:num]; 
} 

+ (int) add3To:(int)num { 
    return [ClassA add:3 with:num]; 
} 
@end 

注意,在大多数情况下,你可以使用实例的方法,而不是静态方法。

相关问题