如何在NSObject中创建UIButton及其@selector

时间:2016-12-30 06:08:09

标签: objective-c xcode uibutton nsobject

我正在尝试生成一个可以创建UIButton的类,并在按钮所在的任何视图中按下按钮时会发生什么。这就是我正在做的事情:

标题文件:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface CreateButton : NSObject

- (UIButton *)createButton;

@end

实现:

#import "CreateButton.h"

@implementation CreateButton

- (UIButton *)createButton
{
    // Instanciate the class
    CreateButton *classInstance = [[CreateButton alloc] init];

    UIButton *testButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 50.0)];
    [testButton setBackgroundColor:[UIColor redColor]];
    [testButton addTarget:classInstance action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    return testButton;
}

- (void)buttonClicked:(UIButton *)sender
{
    NSLog(@"Clicked");
}

@end

最后,在视图控制器中,我初始化类并获取按钮:

CreateButton *create = [[CreateButton alloc] init];
UIButton *testButton = [create createButton];
[self.view addSubview:testButton];

现在一切正常,我可以看到按钮,但是,当我点击它时没有任何反应。令人惊讶的是,如果我将buttonClicked:方法移动到我的视图控制器,它就可以正常工作。我需要保持NSObject内的所有按钮接线。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

好的,我解决了这个问题,很有趣。

实施文件将被修改为:

- (UIButton *)createButton
{
    UIButton *testButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 50.0)];
    [testButton setBackgroundColor:[UIColor redColor]];
    [testButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    return testButton;
}

然后,在视图控制器中,必须在头文件CreateButton部分中预定义@interface类。然后在实施中:

create = [[CreateButton alloc] init];

它有效!如果你向我解释这一点,那将是很好的。