2010-06-30 3 views
1

У меня возникла эта проблема, потому что я оригинально сделал все в главном NIB, но после прочтения узнал, что лучше использовать subviews.UIView (subview) не отправляет IBActions в AppDelegate

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

Спасибо!

ответ

1

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

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

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

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

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

Во-первых, необходимо импортировать файл .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]; 
} 

Надежда, что помогает!

+0

Спасибо! Как насчет доступа к объектам из AppDelegate в контроллере представления? Я объявил AppDelegate следующим образом: // Интерфейс AppDelegate * appDelegate; @property (nonatomic, keep) AppDelegate * appDelegate; // Реализация @synthesize appDelegate; appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; все же, когда я пытаюсь что-то сделать, я всегда получаю «доступ к неизвестному методу геттера». Извините, что stackOverflow не позволяет мне форматировать свой комментарий. –

+0

Пожалуйста, см. Мой обновленный ответ о том, как правильно его называть.Это немного отличается от делегата приложения, поскольку вам не нужно настраивать свойства или синтезировать его так, как вы делали (именно поэтому вы получаете ошибку неизвестного метода getter) – iwasrobbed

+0

P.S. Если ответ вам полезен, пожалуйста, прибегайте к тому, чтобы получить ответ, какой из ответов наиболее полезен. Это вроде как дать людям похлопывать по спине за их помощью здесь :) – iwasrobbed

Смежные вопросы