UIButton在代码中创建不正常

时间:2012-01-06 12:46:54

标签: objective-c uibutton

所以我暂时不再问这个问题,因为我知道解决方案很可能非常简单。但是我已经走到了我的系绳的尽头,所以这里是:

我已经以编程方式创建了一个UIButton并将其链接到一个方法,但它无法正常工作!!

.h定义

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

@interface CreaterPage : UIViewController
{
IBOutlet UIView *postcardView;
IBOutlet UIButton *returnButton;
}

-(void)goBack:(UIButton *)button;

@end

.m定义

#import "CreaterPage.h"

@implementation CreaterPage

-(void)viewDidLoad
{
NSLog(@"Creater Page View Loaded Successfully");
UIButton *goHomeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[goHomeButton addTarget:self action:@selector(goBack:) forControlEvents:UIControlEventTouchDown];
[goHomeButton setTitle:@"Go Back" forState:UIControlStateNormal];
goHomeButton.frame = CGRectMake(100, 100, 100, 100);
[self.view addSubview:goHomeButton];
}

-(void)goBack:(UIButton *)button
{
NSLog(@"Home");
}

@end

基本上,当我运行代码时,按钮显示为已定义,但只要按下它,我的程序就会崩溃。

在main.m文件中,它给出了错误

  

线程1:编程接收信号:“EXC_BAD_ACCESS”。

在线

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

我尝试了所有种类,只是转而以编程方式创建它,因为我无法通过界面构建​​器来完成它。

所以我希望有人可以改变我的少年方式并告诉我哪里出错了:D

谢谢,

马特

编辑1:将@selector(goBack)更改为@selector(goBack :)

2 个答案:

答案 0 :(得分:1)

我的第一个猜测是你的行动被定义为:

[goHomeButton addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchDown];

请注意方法名后面没有冒号的@selector(goBack).m文件中的方法定义为:

-(void)goBack:(UIButton *)button

所以我想把你的行动改为@selector(goBack:)会让事情变得清晰。

旁注:正如您所做的那样,定义IBAction的发件人类型非常罕见。虽然只要您的UIButton是导致该方法被调用的唯一 UI对象,您可能不会遇到任何问题,但这种做法非常糟糕。您应该将方法签名更改为:

-(IBAction)goBack:(id)sender

另请注意使用IBAction代替void。虽然它们在语法上是相同的,但IBAction使读者和Interface Builder清楚地知道哪些方法可用于链接。

答案 1 :(得分:0)

更改

[goHomeButton addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchDown];

[goHomeButton addTarget:self action:@selector(goBack:) forControlEvents:UIControlEventTouchDown];