如何指定我的动作指向的目标?

时间:2014-07-01 03:55:05

标签: ios objective-c xcode uicontrol target-action

我正在学习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

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

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

addTarget:[self superview]

答案 1 :(得分:0)

如果不在内存中加载或分配,则不能简单地调用UIViewController。要实现这一点,您需要分配该类。

使用singleton

的一种方法
[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