Как я могу указать цель, на которую должно указывать мое действие?
Я изучаю target-c для iOS и у меня есть вопрос о создании моего первого механизма target-action. У меня это работает, но в настоящее время я просто установил target:
часть addTarget:action:changeForControlEvents:
метод для nil
Это означает, что он будет искать цель в моем приложении, а не углубляться в ViewController.m
, где находится метод, который я хочу отправить сообщение.
Как я могу рассказать addTarget:action:changeForControlEvents:
метод, какой класс искать в первую очередь?
Вот простая версия моего текущего кода:
Вид:
// View.m
#import View.h
@implementation
- (void)sendAction
{
UIControl *button = [[UIControl alloc] init];
[button addTarget:nil // How do I make this look for ViewController.m?
action:@selector(changeButtonColor)
changeforControlEvents:UIControlEventTouchUpInside];
}
@end
... и контроллер просмотра:
// ViewController.m
#import ViewController.h
@implementation
- (void)target
{
NSLog(@"Action received!");
}
@end
Спасибо за помощь!
2 ответа
Вы не можете просто позвонить UIViewController
если он не загружается или не выделяется в памяти. Для достижения этого вам нужно выделить этот класс.
один способ сделать с помощью синглтона
[button addTarget:[ViewController sharedManager] action:@selector(target)
forControlEvents:UIControlEventTouchUpInside];
или используя NSNotificationCenter, предполагая, что класс уже запущен (стек в предыдущей навигации / другие вкладки).
// View.m
#import View.h
@implementation
- (void)sendAction
{
UIControl *button = [[UIControl alloc] init];
[button addTarget:self
action:@selector(controlAction)
changeforControlEvents:UIControlEventTouchUpInside];
}
-(void)controlAction
{
[[NSNotificationCenter defaultCenter]
postNotificationName:@"changeButtonColor"
object:self];
}
@end
и для цели UIViewController
// ViewController.m
#import ViewController.h
@implementation
-(void) viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveNotification:)
name:@"changeButtonColor"
object:nil];
- (void)receiveNotification:(NSNotification *) notification
{
NSLog(@"Action received!");
}
@end
Предполагая, что ViewController является VC, который создал представление, в котором вы работаете, вы должны иметь возможность использовать:
addTarget: [само наблюдение]