Функция нескольких кнопок UIB 1 - PullRequest
3 голосов
/ 24 февраля 2011

В основном мне нужно иметь несколько кнопок в представлении.Я хотел бы, чтобы все они вызывали одну функцию, чтобы я мог отслеживать «состояние».

Как я могу определить, какая кнопка вызывает функцию?Есть ли способ получить текст отправителя?

Ответы [ 3 ]

5 голосов
/ 24 февраля 2011

В методах действий iOS, включая методы IBAction, могут быть любые из следующих подписей (см. « Target-Action в UIKit »):

- (void)action
- (void)action:(id)sender
- (void)action:(id)sender forEvent:(UIEvent *)event

Если вы используете методподпись, которая принимает отправителя, то у вас есть доступ к объекту, который вызвал действие.Затем вы можете получить доступ к свойствам вызывающего объекта, включая его заголовок и тег.Вы также можете сравнить отправителя с указателями, которые у вас уже есть, на ваши кнопки, чтобы определить, какая кнопка является отправителем данного конкретного события.

Я предпочитаю сравнивать указатели, потому что считаю, что if (sender == self.nextPageButton) легче понять и с меньшей вероятностью сломать, чем if (sender.tag == 4) или if ([((UIButton *)sender).currentTitle isEqualToString:@"foo"]).Просмотр тегов в IB ничего не говорит о том, что код предполагает, что они означают, и являются ли они важными или нет.Названия будут меняться по мере обновления пользовательского интерфейса или локализации приложения, и эти изменения также не должны требовать изменения кода.

3 голосов
/ 24 февраля 2011

Установите атрибут tag для кнопки.

Вы можете сделать это в Интерфейсном Разработчике (просто просмотрите поля).

Затем в коде:

if (sender.tag == 0) {
} else if (sender.tag == 1)

и т.д.

1 голос
/ 24 февраля 2011

Вам не нужно устанавливать тег явно. Вы можете определить IBOutlets UIButton в вашем файле .h и их свойства, а также

@property (nonatomic , retain) IBOutlet UIButton *myButton;

и метод как

-(IBAction) browse : (id) sender; 

в файле .m вы можете реализовать метод как

-(IBAction) browse : (id) sender{

    if((UIButton *)sender == myButton){/*add the action here*/}
 } 

Добавьте больше операторов if в методе для любого количества кнопок. Подключите IBOutlets всех соответствующих кнопок, а также выберите селектор.

Не забудьте освободить IBOutlets в методе dealloc, чтобы предотвратить любую утечку памяти.

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

...