UIView (подпредставление) не отправляет IBActions в AppDelegate - PullRequest
1 голос
/ 30 июня 2010

У меня возникла эта проблема, потому что я изначально все сделал в основном NIB, но потом, прочитав, узнал, что лучше использовать подпредставления.

У меня есть IBActions в AppDelegate, и яуспешно подключился и загрузил мои подпредставления.Однако, когда я пытаюсь подключить свои кнопки в подпредставлениях к IBActions в AppDelegate, IBActions появляются под «Первым ответчиком».Кажется, они нормально соединяются, но при запуске приложения они не запускают IBActions (я подтвердил это с некоторыми NSLogs, это не ошибка в коде внутри IBActions).Что я делаю не так?

Спасибо!

1 Ответ

1 голос
/ 30 июня 2010

AppDelegate следует использовать только для очень специфических элементов, таких как реализация протокола UIApplicationDelegate (т. Е. Такие методы, как applicationDidFinishLaunching) или в некоторых случаях для хранения глобальных переменных.

Вы должны хранить IBActions и другие выходы в их соответствующих файлах контроллера представления (т. Е. Если вы создали MyViewController.h и MyViewController.m, которые связаны с MyViewController.xib, где у вас есть несколько кнопок, изображений и т. Д.).Затем их можно подключить, перетащив нужный элемент управления инспектора (т.е. TouchUpInside) к владельцу файла.

Что-то, что вы должны прочитать, чтобы лучше понять контроллеры представления: http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

Обычно этоЛучше всего создать уникальный контроллер представления для каждого представления, которое вы представите пользователю.Например, если бы у меня был главный экран, а затем «о» или экран настроек, я бы сделал каждый из них своим собственным контроллером представления.Это помогает организовать вещи лучше, чем использование одного представления с целой кучей подпредставлений, которые вы скрываете / показываете, а также улучшит время загрузки и общую производительность.

Обновите ваш второй вопрос в комментариях о доступе кделегат приложения:

Сначала необходимо импортировать файл .h (т. е. #import "AppDelegate.h") для делегата приложения в любой файл .m контроллера контроллера, который вы хотите использовать для доступа к любым переменным, массивам и т. д.Вы сохранили в файлах делегатов приложения.Убедитесь, что вы синтезируете любые объекты, которые вы создаете в файле .h делегата приложения, в файле .m делегата приложения, чтобы были созданы методы получения и установки (чтобы вы могли к ним обращаться).

Затем в контроллере представления .mфайл, в зависимости от того, какой метод вы используете:

-(void)someMethod { 
 // here we just create a shortcut to the app delegate called "theAppDelegate"
 YourAppDelegateFileNameHere *theAppDelegate = (YourAppDelegateFileNameHere *)[[UIApplication sharedApplication] delegate];

 // now you can use the dot notation if you wanna access a variable
 int SomeNewInteger = theAppDelegate.someIntegerYouHaveStored;

 // or some array you have stored
 return [theAppDelegate.someArrayYouCreated count]; 
 }

Надеюсь, это поможет!

...