0

我正在为 iOS 学习 Objective-c,并且有一个关于创建我的第一个目标动作机制的问题。我已经让它工作了,但目前我只是将方法的target:一部分设置为,这意味着它将在我的应用程序周围搜索目标,而不是向下钻取,我要发送消息的方法所在的位置。addTarget:action:changeForControlEvents:nilViewController.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

谢谢您的帮助!

4

2 回答 2

0

假设 ViewController 是创建您正在使用的视图的 VC,您应该能够使用:

addTarget:[自我监督]

于 2014-07-01T04:03:39.040 回答
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
于 2014-07-01T04:28:04.700 回答