Параметризованный селектор действий UIButton для метода в другом классе? - PullRequest
4 голосов
/ 10 апреля 2011

Это в значительной степени синтаксический вопрос. Как настроить селектор действий UIButton для вызова метода другого класса? Я сделал #import класса, чьи методы мне нужно вызвать с помощью кнопки, и у меня есть следующее частичное понимание того, как должен выглядеть код кнопки:

    UIButton *btnSplash = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnSplash.frame = CGRectMake(250, 270, 180, 30);
    [btnSplash setTitle:@"Menu" forState:UIControlStateNormal];
    [btnSplash addTarget:self action:@selector([CLASS METHOD:PARAMETER]) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:btnSplash];

Однако я получаю следующие ошибки:

ожидается ':' before '[' token

имя метода отсутствует в @ selector

Пример кода, который я видел в справочной библиотеке, вызывает локальные методы, поэтому я пытаюсь обобщить, и мои попытки до сих пор были бесполезными.

Спасибо

1 Ответ

10 голосов
/ 10 апреля 2011

Селектор является представлением имени метода независимо от того, какие классы или категории его реализуют.

Допустим, у вас есть класс с именем AnotherClass, который реализует метод - (void)doSomething:(id)sender.Соответствующий селектор - doSomething:, представлен в коде как @selector(doSomething:).Если вы хотите, чтобы действие кнопки вызывало этот метод, вам нужно иметь экземпляр AnotherClass - и именно этот экземпляр является действием target вместо self.Следовательно, ваш код должен иметь:

#import "AnotherClass.h"

AnotherClass *instanceOfAnotherClass;
// assign an instance to instanceOfAnotherClass

UIButton *btnSplash = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btnSplash.frame = CGRectMake(250, 270, 180, 30);
[btnSplash setTitle:@"Menu" forState:UIControlStateNormal];

[btnSplash addTarget:instanceOfAnotherClass
              action:@selector(doSomething:)
    forControlEvents:UIControlEventTouchUpInside];

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