Вызов IBAction объявлен в другом классе - PullRequest
1 голос
/ 27 ноября 2011

Я пытаюсь создать приложение для iPhone, и у меня есть основной viewController и ряд других viewController. Это потому, что это многовидовое приложение.

В файлах ViewController.h и ViewController.m я создал все свои IBActions, потому что они будут общими для всех других представлений.

Теперь в firstViewController.m я создал пользовательскую кнопку, используя следующий код:

UIButton *settingsButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
settingsButton.frame = CGRectMake(110.0, 360.0, 100.0, 30.0);
[settingsButton setTitle:@"Play" forState:UIControlStateNormal];
settingsButton.backgroundColor = [UIColor clearColor];
[settingsButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal ];
UIImage *buttonImageNormal = [UIImage imageNamed:@"setButtonNormal.png"];
UIImage *strechableButtonImageNormal = [buttonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[settingsButton setBackgroundImage:strechableButtonImageNormal forState:UIControlStateNormal];
UIImage *buttonImagePressed = [UIImage imageNamed:@"setButtonPressed.png"];
UIImage *strechableButtonImagePressed = [buttonImagePressed stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[settingsButton setBackgroundImage:strechableButtonImagePressed forState:UIControlStateHighlighted];
[settingsButton addTarget:self action:@selector(loadSettingsView) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:settingsButton];

Как видите, действие называется loadSettingsView, которое я правильно объявил во ViewController. Но это не работает, и это потому, что приведенный выше код находится в firstViewController.m, а НЕ в ViewController.m, где объявлен IBAction. Примечание. Я переместил приведенный выше код во ViewController, и действие работает, поэтому оно не является проблемой. Проблема в том, что я не могу найти способ получить доступ к действию, объявленному в другом классе, чем тот, над которым я работаю.

Может кто-нибудь помочь мне с этим?

Большое спасибо

1 Ответ

1 голос
/ 27 ноября 2011

Ответ на ваш вопрос заключается в том, как вы объявляете цель действия для кнопки

[settingsButton addTarget:self action:@selector(loadSettingsView) forControlEvents:UIControlEventTouchUpInside];

Если этот фрагмент кода находится в firstViewController.m и вы говорите, что целью является self, это означает, что компилятор должен искать метод в классе firstViewController. Поэтому, чтобы решить эту проблему, вам нужно указать target действия вашей кнопки, чтобы указать на класс viewController. Кстати, в этот момент я хотел бы упомянуть, что ваше именование SUCKS, если вы подкласс UIViewController не называете его ViewController, делает его более значимым.

Фактическое исправление.

создает глобальное свойство, которое будет указывать на ViewController объект и вызывать его vc.

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