2011-04-17 30 views
0

我厌倦编程我的子视图,因为我想有很好的圆形按钮与图像。所以我写了myView.h和myView.m与init方法至极看上去某事像这样:保持MVC清洁与编程写入视图

- (id)init 
{ 
    if (self = [super init]){ 
    redBlack = [UIImage imageNamed:@"redB.png"]; 
    redWhite = [UIImage imageNamed:@"redW.png"]; 

    redButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    redButton.frame = CGRectMake(20.0, 30.0, 130.0, 130.0); 
    [redButton setBackgroundImage:redBlack forState:UIControlStateNormal]; 
    [redButton setBackgroundImage:redWhite forState:UIControlEventTouchDown]; 
    [redButton addTarget:self action:@selector(controller.colorButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [redButton setTag:0]; 
    [self.view addSubview:redButton]; 
..... 

的问题是,colorButtonPressed是一种方法,这是写在我的ControllerView - 辛格尔顿。 我不知道我是否这样做,但实际上我想保持MVC尽可能干净。是否这样做是一种常见的方式,如果是这样,编译器不让我写controller.colorButtonPressed:in @selector?!? 或者我应该在我的控制器类中指定以编程方式编写的视图?

希望这些问题不要听起来太愚蠢!
并提前致谢!取而代之的

[redButton addTarget:self action:@selector(controller.colorButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

回答

1

它应该是:

[redButton addTarget:controller action:@selector(colorButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
+0

但colorButtonPressed方法:没有在同一类中声明? – NewYearsEve 2011-04-17 08:55:53

+0

但目标是动作发送到的地方。我以为你在'controller'中有'colorButtonPressed:'? – 2011-04-17 08:59:56

+0

是的,我这样做,哦,所以行动得到承认,虽然它不是写在这个类。那么我需要将方法声明为IBAction吗?我以为我不必这样做,如果我自己写视图。 – NewYearsEve 2011-04-17 09:21:08

0

目标必须是该方法中定义的类

如果目标设定为“自我”。那么该方法应该在同一个类中。你的代码似乎表明,该方法是在控制器,这意味着目标应该是“控制器”,而选择器应该是@选择器(colorButtonPressed :)