Установите цель и селектор кнопки на несколько методов - PullRequest
4 голосов
/ 01 февраля 2012

Я хочу добавить несколько методов, которые реагируют как селектор при нажатии кнопки.Может ли одна кнопка иметь два метода, вызываемых при нажатии кнопки?

В своем исследовании я обнаружил, что в Руководстве по языку программирования Objective-C эта кнопка будет вызывать все методы с тем же именем, что и уселектор.

Я хочу, чтобы моя кнопка выполняла два действия одновременно:

  1. воспроизводит аудиофайл
  2. отображает представления в массиве.

    UIBarButtonItem * play = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemPlay target: self action: @selector (play:)];

Благодарю совет.

Спасибо

Ответы [ 3 ]

10 голосов
/ 01 февраля 2012

@selector() буквально просто возвращает значение SEL, которое является просто именем (фактически, под капотом, это буквально строка).Это не определяет никакого конкретного поведения.Классы выбирают, как реагировать, когда им отправляют селектор.

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

- (void)eatCakeAndIceCream {
    [self eatCake];
    [self eatIceCream];
}

Вы также можете добавить несколько действий к элементу управления с повторными вызовами addTarget:action:forControlEvents::

[someControl addTarget:self action:@selector(eatCake) forControlEvents:UIControlEventTouchDown];
[someControl addTarget:self action:@selector(eatIceCream) forControlEvents:UIControlEventTouchDown];
4 голосов
/ 01 февраля 2012

Вы можете указать несколько пар целевого действия для конкретного события.

[btn addTarget:self action:@selector(playSound:) forControlEvents:UIControlEventTouchUpInside];
[btn addTarget:self action:@selector(displayViews:) forControlEvents:UIControlEventTouchUpInside];
1 голос
/ 04 февраля 2012

Каждый раз, когда вы добавляете цель к объекту, он создает объект управления (также называемый «сообщением действия») (объект управления имеет тип управления пользовательским интерфейсом). Этот управляющий объект содержит имя селектора под названием «действие селектора» и цель, для которой этот селектор должен быть вызван. Этот объект управления затем получает привязку (зарегистрирован) с указанным событием. Вы можете привязать несколько объектов управления к одному и тому же событию. Это означает, что я могу иметь 2 цели с двумя селекторами, связанными с одним и тем же событием.

Пример

[btn addTarget:oneTarget action:@selector(foo:) forControlEvents:UIControlEventTouchUpInside];

[btn addTarget:twoTarget action:@selector(bar:) forControlEvents:UIControlEventTouchUpInside];

Во время выполнения все эти управляющие сообщения, связанные с событием give, будут отправлены соответствующей цели, другими словами, все эти методы селектора будут вызваны для соответствующих объектов целевого класса.

...