@селектор для функции в отдельном классе

#iphone

#iPhone

Вопрос:

Если у меня есть функция, определенная в классе Foo, и моя панель классов имеет ссылку на класс Foo, могу ли я использовать @selector для вызова этой функции? Что-то вроде

 @selector([Foo someFunctionInFoo:])
  

Я использовал @selector только для вызова функций в том же классе. Я попытался сделать что-то похожее на приведенный выше код, но это не сработало, и я не был уверен, возможно ли это вообще. Спасибо.

Ответ №1:

@selector не хранит никакой информации о вызовах, только селектор.

 [Foo performSelector:@selector(someFunctionInFoo:) withObject:nil];
  

Вы также можете сделать:

 Class class = SomeClass;
id obj = [class someObject];
SEL sel = @selector(someFunction);
[class performSelector:sel];
[obj performSelector:sel];
  

До тех пор, пока оба реализуют someFunction .

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

 [[UIBarButtonItem alloc] initWithTitle:@"Filter"
                                 style:UIBarButtonItemStyleBordered
                                target:foo // The object to send the message to
                                action:@selector(someFunctionInFoo:)]; // The message to send
  

Комментарии:

1. Как бы мне связать этот селектор, когда я создаю UIBarButonItem? Например, self. Родительский контроллер. FilterButton = [[UIBarButtonItem alloc] initWithTitle:@»Filter» стиль: UIBarButtonItemStyleBordered цель:self action:@selector (Кнопка фильтра нажата:)];

2. Параметр ‘target’ указывает, на какой объект отправлять сообщение, а параметр ‘action’ указывает, какой селектор использовать. Это вся информация, необходимая для отправки сообщения куда угодно.

3. Вы заменяете self на Foo . Этот метод в основном выполняется [target performSelector:action] при нажатии кнопки bar. Я обновил свой ответ, чтобы включить это…