UIButton在单独的类中添加到子视图以存储方法

时间:2014-07-16 18:22:41

标签: objective-c uibutton

在一个程序中,我有一个名为PullLeftMenu.h/.m的课程。

ViewController.m我正在呼叫PullLeftMenu,如此:

PullLeftMenu *openMenu = [[PullLeftMenu alloc] init];
[openMenu classMethodHere];

因此,只需运行带参数的方法。但是,类PullLeftMenu的此方法的一部分是向显示的子视图添加按钮。每个按钮都分配有自己的方法进行调用。比如说,按钮1调用方法btnUsefulStuff

我在btnUsefulStuff类和PullLeftMenu中都放置了ViewController.m方法代码,但都没有被触发 - 而是导致内存崩溃。

PullLeftMenu.m中按钮的代码

UIButton *btnUsefulStuff = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btnUsefulStuff.frame = CGRectMake(10.0, 180.0, 160.0, 10.0);
[btnUsefulStuff setTitle:@"Useful Stuff" forState:UIControlStateNormal];
[btnUsefulStuff addTarget:self action:@selector(btnUsefulStuff) forControlEvents:UIControlEventTouchUpInside];
btnUsefulStuff.titleLabel.font = [UIFont fontWithName:@"KhmerUI" size:16];
btnUsefulStuff.titleLabel.textColor = [UIColor colorWithHexString:@"3a589b"];
[secondView addSubview:btnUsefulStuff];

以下是方法:

-(void)btnUsefulStuff{
    NSLog(@"button");
}

问题是,我不知道在哪里放置方法-(void)btnUsefulStuff,无论我放在哪里,它似乎都没有被触发,应用程序崩溃并带有内存警告。错误是:

Thread 1: EXC_BAD_ACCESS

1 个答案:

答案 0 :(得分:1)

由于此行[btnUsefulStuff addTarget:self action:@selector(btnUsefulStuff) forControlEvents:UIControlEventTouchUpInside];位于PullLeftMenu,您说目标是self,这就是您需要的方法。

我怀疑您的问题是您已将openMenu作为本地变量。将其更改为ViewController内的强大属性,以便当有人点击按钮时它仍在内存中。