无法调用类方法

时间:2013-04-25 10:20:44

标签: objective-c class methods

我正在构建基于标记的应用程序,并希望从每个标签(ViewController)调用相同的函数。

我正在尝试以下列方式:

#import "optionsMenu.h"

- (IBAction) optionsButton:(id)sender{
   UIView *optionsView = [options showOptions:4];
   NSLog(@"options view tag %d", optionsView.tag);
}

optionsMenu.h档案:

#import <UIKit/UIKit.h>

@interface optionsMenu : UIView

- (UIView*) showOptions: (NSInteger) tabNumber;

@end

optionsMenu.m档案:

@import "optionsMenu.h"
@implementation optionsMenu

- (UIView*) showOptions:(NSInteger) tabNumber{
   NSLog(@"show options called");

   UIView* optionsView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
   optionsView.opaque = NO;
   optionsView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5f];
   //creating several buttons on optionsView
   optionsView.tag = 100;

return optionsView;

}

@end

结果是我从未得到“show options called”调试消息,因此optionsView.tag总是0

我做错了什么?

我理解这很可能是一个简单而愚蠢的问题,但我自己无法解决。

感谢任何反馈。

1 个答案:

答案 0 :(得分:3)

首先要注意的是,这是一个实例方法(而不是问题标题中描述的Class方法)。这意味着为了调用此方法,您应该具有alloc / init类的实例并将消息发送到实例。例如:

// Also note here that Class names (by convention) begin with
// an uppercase letter, so OptionsMenu should be preffered
optionsMenu *options = [[optionsMenu alloc] init];
UIView *optionsView = [options showOptions:4];

现在,如果您只想创建一个返回预配置UIView的Class方法,您可以尝试这样的方法(假设您不需要在方法中访问ivars):

// In your header file
+ (UIView *)showOptions:(NSInteger)tabNumber;

// In your implementation file
+ (UIView *)showOptions:(NSInteger)tabNumber{
    NSLog(@"show options called");

    UIView *optionsView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    optionsView.opaque = NO;
    optionsView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5f];
    //creating several buttons on optionsView
    optionsView.tag = 100;

    return optionsView;
}

最后发送这样的信息:

UIView *optionsView = [optionsMenu showOptions:4]; //Sending message to Class here

最后不要忘记将视图添加为子视图以显示它。 我希望这是有道理的......