Ваша идея уменьшить количество повторений с помощью создания одной функции превосходна (это известно как принцип «Не повторяй себя» ). В этом случае, однако, лучший способ сделать это - создать отдельный метод , а не функцию.
Один метод IBAction
может иметь любое количество кнопок, подключенных к нему. Кнопки можно различить по их tag
, которые вы можете легко установить в инспекторе Интерфейсного Разработчика. Дайте каждой из ваших цифровых кнопок отдельный тег; в этом случае лучше установить для каждого тега число, которое представляет кнопка.
Затем вы создаете одну единственную IBAction
для всех ваших цифровых кнопок:
@interface MyCustomObject: NSObject{
IBOutlet NSTextField * myTextField;
}
- (IBAction) numberButtonPressed: (id)sender;
// Other methods...
@end
Обратите внимание, что я изменил имена переменных метода и экземпляра, чтобы они начинались со строчных букв; это обычное явление в коде ObjC. Также хорошо явно набрать ваш IBOutlet
(NSTextField
вместо общего id
); это предотвратит ошибочное подключение его к неправильному объекту, среди прочих ошибок.
Подключите все цифровые кнопки к этому действию в Интерфейсном Разработчике. Когда метод вызывается, вы просто получаете доступ к тегу кнопки, чтобы установить текстовое поле:
- (IBAction) numberButtonPressed: (id)sender {
[myTextField setIntegerValue:[sender tag]];
}
Что касается вашего явного вопроса - где должна быть объявлена функция - вы обычно помещаете ее в файл .m, над @implementation
. * Ошибка, которую вы получаете, связана с попыткой доступа к переменная экземпляра, Text
, которая принадлежит объекту вне любого из методов объекта. Только код внутри метода может получить доступ к ивару объекта таким образом.
* Хотя он может идти куда угодно, кроме как внутри блока @interface
.