我正在学习iOS的objective-c,并且有关于创建我的第一个目标 - 动作机制的问题。我已经开始工作,但目前我只是将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
感谢您的帮助!
答案 0 :(得分:0)
假设ViewController是创建您正在使用的视图的VC,您应该可以使用:
addTarget:[self superview]
答案 1 :(得分:0)
如果不在内存中加载或分配,则不能简单地调用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