iPhone: передать значение методу, вызываемому через @selector () - PullRequest
0 голосов
/ 30 октября 2009

Я хочу передать переменную методу buttonEvent в селекторе.

[кнопка addTarget: messageTableViewController действие: @selector (buttonEvent) forControlEvents: UIControlEventTouchUpInside];

Как это сделать, скажем, если переменная - uid?

подпись метода - (void) buttonEvent: (NString *) uid;

Ответы [ 3 ]

1 голос
/ 30 октября 2009
  1. Сохраните все ваши кнопки в массиве.

  2. Сохраните аргументы, которые вы хотите передать, в другом массиве.

  3. Используйте - (IBAction) myAction: (id) отправителя и найдите вашу кнопку в массиве кнопок (indexOfObject)

  4. Используйте этот индекс, чтобы найти нужное значение в массиве строк uid и продолжить.

Альтернативой является установка целочисленного значения .tag для каждого UIButton в качестве индекса, опять же в этот массив uids.

0 голосов
/ 30 октября 2009

Механизм target-action отправит отправителю действия аргумент селектора, в вашем случае - кнопку, которая была нажата. Я не думаю, что есть какой-то способ обойти это.

Возможно, вы захотите связать свой uid с кнопкой (например, в NSDictionary) и извлечь ее в методе действия, например:

- (void)buttonEvent:(id)sender
{
    NSDictionary *dict = self.buttonToUidDict;
    NSString *uid = [dict valueForKey:sender];
}
0 голосов
/ 30 октября 2009

Во-первых, вам нужно включить двоеточие в вызов @selector:

[button addTarget: messageTableViewController action: @selector(buttonEvent:) forControlEvents: UIControlEventTouchUpInside];

Во-вторых, вы не можете делать именно то, что вы хотите. Аргумент, передаваемый buttonEvent: всегда будет фактическим элементом управления, к которому был применен. Вы можете использовать этот элемент управления, чтобы выяснить, что делать дальше (то есть либо использовать его напрямую, либо установить его тег и использовать его)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...