1

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

下面是我的问题的一个简单示例。
我正在尝试调用方法 'getName',但我收到一条错误消息:“No visible @interface for 'LabelGestureRecognizer' 声明选择器 'getName:'”</p>

视图控制器.h:

@property (nonatomic, strong) UILabel *valueLabel;

视图控制器.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;
}

标签.h:

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

@class 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;
}

标签手势识别器.h:

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

标签.m:

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

5 回答 5

1

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

于 2012-11-12T10:23:56.883 回答
1

当您使用selfin 时Label.m,它代表当前的类对象。如果您需要表示LabelGestureRecognizer对象,则需要使用它来代替selfas,

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

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

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

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

于 2012-11-12T10:23:57.977 回答
1

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

 @interface
 - (NSString *) getName:(int) position;
 @end
于 2012-11-12T10:28:29.260 回答
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]];

有关类方法的更多信息,您可以点击此链接编写 Objective-C 类方法

于 2012-11-12T10:27:43.053 回答
0

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

于 2012-11-12T10:44:08.850 回答