我正在构建基于标记的应用程序,并希望从每个标签(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
。
我做错了什么?
我理解这很可能是一个简单而愚蠢的问题,但我自己无法解决。
感谢任何反馈。
答案 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
最后不要忘记将视图添加为子视图以显示它。 我希望这是有道理的......