Хобрук: Ваш путь к мастерству в программировании

Как передать переменную методу, который вызывается при срабатывании UIButton?

У меня есть программно созданный UIButton с UIScrollView. Когда эта кнопка нажата, она запускает действие, но помимо простого запуска действия я хочу, чтобы кнопка также отправляла переменную (int) в метод.

Вот моя кнопка:

UIButton *btn15 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btn15 setTitle:@"Cool title" forState:UIControlStateNormal];
    [btn15 setFrame:CGRectMake(165, 770, 145, 145)];
    [btn15 addTarget:self action:@selector(selectFav) forControlEvents:UIControlEventTouchUpInside];
    [_scroller addSubview:btn15];

... Итак, это моя 15-я кнопка в этом представлении прокрутки. Я хочу написать метод selectFav для обработки нажатия кнопки. Я хотел бы, чтобы каждая кнопка отправляла методу свой номер, а затем метод распечатывал номер в NSLog. Поскольку в этом примере используется кнопка 15, я хочу, чтобы число 15 каким-то образом передавалось в selectFav.

Я предполагаю, что это легко сделать, но не могу заставить его работать. Спасибо за любые предложения!

04.06.2013

Ответы:


1

Вы можете использовать свойство тега UIView в кнопке, а затем извлечь значение из кнопки после ее нажатия.

что-то типа:

- (void)yourAction:(UIButton *)sender{
    NSInteger value=[sender tag];
}
04.06.2013

2

Это легко сделать в BlocksKit. BlocksKit позволяет прикреплять блоки в качестве обработчиков событий.

UIButton *btn15= ...;
[btn15 addEventHandler:^(id sender) {
    [self selectFav:15];
} forControlEvents:UIControlEventTouchUpInside];

- (void)mySelectFav:(NSUInteger)buttonId {
    ...
}
04.06.2013

3

Вот как бы я это сделал. Установите свойство тега кнопки, а затем перейдите к свойству в действии кнопки.

-(void)myMethod
{
   UIButton *btn15 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btn15 setTitle:@"Cool title" forState:UIControlStateNormal];
    [btn15 setFrame:CGRectMake(165, 770, 145, 145)];
    [btn15 addTarget:self action:@selector(selectFav:) forControlEvents:UIControlEventTouchUpInside];
    [_scroller addSubview:btn15];
    btn15.tag = 15;

}

-(void)selectFav:(id)sender
{
    UIButton *button = (UIButton *)sender;
    NSLog(@"%d", button.tag); //this will print 15. Store it in a int variable
}
04.06.2013

4

Вы можете использовать тег передаваемого UIButton, как указано @J2theC, или вы также можете добавить свойство в UIButton: Подкласс UIButton для добавления свойства

Когда вы передаете UIButton селектору, вы можете определить, какой UIButton передается из тега или свойства.

Также не забудьте обновить реализацию метода addTarget, включив : в передаваемый параметр селектора:

[btn15 addTarget:self action:@selector(selectFav:) forControlEvents:UIControlEventTouchUpInside];
04.06.2013
Новые материалы

Управление DOM для чайников вроде меня
Одной из первых вещей, которую мы рассмотрели, когда начали изучать Javascript во Flatiron, была модель DOM. Кто он? Чем он занимается? Он больше машина, чем человек? Ну да довольно много. ДОМ..

Что такое структура данных?
Структура данных хранит и извлекает данные. Все, что обеспечивает эти две функции, является структурой данных . Период. Вы можете пропустить оставшуюся часть статьи, если ответ..

мои январские чтения по программированию
Эрик Эллиот Программирование приложения JavaScript Эл Свейгарт «Автоматизируйте скучные вещи с помощью Python» Прогрессивное веб-приложение Google..

Создание ассоциаций секвелизации с помощью инструмента командной строки Sequelize
Sequelize - популярный, простой в использовании инструмент объектно-реляционного сопоставления (ORM) JavaScript, который работает с базами данных SQL. Довольно просто начать новый проект с..

Искусственный интеллект в юридической отрасли - пример прогнозирования судебных решений с помощью глубокого обучения
На протяжении всей истории люди полагались на суды, присяжных, королей и королев в отправлении правосудия. Сегодня способность судов обеспечивать справедливое и быстрое правосудие для своих..

Введение в машинное обучение для обнаружения аномалий (часть 1)
Тщательно созданный, тщательно спроектированный ресурс для специалистов по данным. Часть 1 Главы 03 из Руководства по машинному обучению для обнаружения аномалий Внимание! Прежде чем вы..

Начало работы с Pulumi в Digital Ocean
Цифровой океан (ДО) — отличная альтернатива многим другим поставщикам облачных услуг. DO предоставляет простой и понятный пользовательский интерфейс, упрощающий управление инфраструктурой и..