#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. Я обновил свой ответ, чтобы включить это…