В основном мне нужно иметь несколько кнопок в представлении. Я бы хотел, чтобы все они вызывали одну функцию, чтобы я мог отслеживать «состояние».
Как узнать, какая кнопка вызвала функцию? Есть ли способ получить текст отправителя?
В основном мне нужно иметь несколько кнопок в представлении. Я бы хотел, чтобы все они вызывали одну функцию, чтобы я мог отслеживать «состояние».
Как узнать, какая кнопка вызвала функцию? Есть ли способ получить текст отправителя?
В 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 ничего не говорит вам о том, что код предполагает, что они означают, и являются ли они важными или нет. Заголовки будут меняться по мере обновления пользовательского интерфейса или локализации приложения, и эти изменения также не должны требовать изменения кода.
Установите атрибут tag
кнопки.
Вы можете сделать это в Interface Builder (просто просмотрите поля).
Затем в коде:
if (sender.tag == 0) {
} else if (sender.tag == 1)
и т.п.
Вам не нужно устанавливать тег явно. Вы можете определить 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, чтобы предотвратить утечку памяти.
Надеюсь это поможет!!