如何从iOS中的另一个类调用方法?

时间:2012-11-12 10:19:03

标签: iphone ios class methods label

我有2节课。第一个是Label,另一个是LabelGestureRecognizer。在LabelGestureRecognizer中有一个名为getName的方法,我希望通过Label类调用该方法。

以下是我的问题的一个简单示例 我试图调用方法'getName',但我收到一个错误说: “'LabelGestureRecognizer'没有可见的@interface'声明选择器'getName:'”

ViewController.h:

@property (nonatomic, strong) UILabel *valueLabel;

ViewController.m:

- (void)viewDidLoad
{
    valueLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 366, 320, 50)];
    valueLabel.textAlignment = UITextAlignmentCenter;
    valueLabel.backgroundColor = [UIColor lightGrayColor];
    [self.view addSubview:valueLabel]; 
}

- (void) wheelDidChangeValue:(NSString *) newValue {
    self.valueLabel.text = newValue;
}

Label.h:

@protocol LabelDelegate <NSObject> 
@required
 -(void) wheelDidChangeValue:(NSString *) newValue;
@end

@class LabelGestureRecognizer;

LabelGestureRecognizer.m:

- (NSString *) getName:(int) position
{
    NSString *resultat = @"";
    switch (position) {
        case 0:
            resultat = @"Test 1";
            break;
        case 1:
            resultat = @"Test 2";
            break;
        default:
            break;
    }
    return resultat;
}

LabelGestureRecognizer.h:

 @interface LabelGestureRecognizer : UIGestureRecognizer
 {
     NSDate *previous;
     double current;
 }

Label.m:

 LabelGestureRecognizer *recognizer = [[LabelGestureRecognizer alloc] init];
 [self.delegate wheelDidChangeValue:[self getName:0]];

5 个答案:

答案 0 :(得分:1)

它可能会发生很多原因,但通常它会说它标记的代码行,它没有看到任何证据表明您引用的选择器位于它认为对象具有的类型的接口中

答案 1 :(得分:1)

self中使用Label.m时,表示当前的类对象。如果您需要代表LabelGestureRecognizer个对象,则需要使用该对象代替self

[self.delegate wheelDidChangeValue:[recognizer getName:0]];

此外,您应在LabelGestureRecognizer.h文件中声明以下内容,

@interface LabelGestureRecognizer : UIGestureRecognizer
 {
     NSDate *previous;
     double current;
 }
- (NSString *) getName:(int) position;
@end

您的错误消息是说它无法在getName类文件中看到LabelGestureRecognizer.h方法的声明。

答案 2 :(得分:1)

您需要在LabelGestureRecognizer.h的接口中声明选择器

 @interface
 - (NSString *) getName:(int) position;
 @end

答案 3 :(得分:0)

您好,您只需通过alloc类创建一个类实例并调用该方法,使用后即可发布

LabelGestureRecognizer *labelGestureRecognizer = [[LabelGestureRecognizer alloc] init];

[self.delegate wheelDidChangeValue:[labelGestureRecognizer getName:0]];
[labelGestureRecognizer release];

但是作为你的代码,我建议创建类方法

+ (NSString *) getName:(int) position
{
    NSString *resultat = @"";
    switch (position) {
        case 0:
            resultat = @"Test 1";
            break;
        case 1:
            resultat = @"Test 2";
            break;
        default:
            break;
    }
    return resultat;
}

你可以通过

获得价值
 [self.delegate wheelDidChangeValue:[LabelGestureRecognizer getName:0]];

有关课程方法的更多信息,请点击此链接Writing Objective-C Class Methods

答案 4 :(得分:0)

只需创建该方法所在的类的对象,最后使用该对象调用该方法。简单... ...