0

我正在构建一个基于标签的应用程序,并希望从每个选项卡 ( 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

结果是我从未收到“显示选项调用”调试消息,因此optionsView.tag始终是0.

我究竟做错了什么?

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

任何反馈表示赞赏。

4

1 回答 1

3

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

// 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];

现在,如果您只想创建一个返回 preconfigured 的 Class 方法UIView,您可以尝试这样的事情(前提是您不需要在您的方法中访问 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

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

于 2013-04-25T10:36:33.693 回答