UIButton, созданный в коде, не работает должным образом - PullRequest
0 голосов
/ 06 января 2012

Так что я некоторое время не хотел задавать этот вопрос, потому что я знаю, что решение, скорее всего, будет очень простым.Но я подошел к концу моей привязи, и вот так:

Я создал 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 ]

1 голос
/ 06 января 2012

Моим первым предположением будет то, что ваше действие определено так:

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

Обратите внимание на @selector(goBack) без двоеточия после имени метода. Ваш метод в вашем файле .m определен как:

-(void)goBack:(UIButton *)button

Итак, я думаю, что изменение вашего действия на @selector(goBack:) прояснит ситуацию.

Sidenote: Очень редко можно определить тип отправителя для IBAction, как вы это сделали. Хотя вы можете не столкнуться с какими-либо проблемами, если ваш UIButton является объектом only UI, вызывающим вызов метода, это очень плохая практика. Вы должны изменить сигнатуру вашего метода на:

-(IBAction)goBack:(id)sender

Обратите внимание также на использование IBAction вместо void. Синтетически это одно и то же, но IBAction дает понять читателям и Интерфейсному Разработчику, какие методы доступны для связывания.

0 голосов
/ 06 января 2012

Изменить

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

на

[goHomeButton addTarget:self action:@selector(goBack:) forControlEvents:UIControlEventTouchDown];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...