UIButton修改图像的UIImageView

问题描述:

我正在开发一个iPhone应用程序,我需要一点帮助。我创建了一个按钮,当我点击按钮来改变图像的imageView时,我想要一个按钮。UIButton修改图像的UIImageView

图像和按钮:

CGRect slot1Rect = CGRectMake(70, 90, 80, 110); 
    UIImageView *slot1 = [[UIImageView alloc] initWithFrame:slot1Rect]; 
    [slot1 setImage:[UIImage imageNamed:@"carte_dos_rouge.png"]]; 
    slot1.opaque = YES; 
    [self.view addSubview:slot1]; 
    [slot1 release]; 



    UIButton *carte1J1=[UIButton buttonWithType:UIButtonTypeCustom]; 
    carte1J1.frame=CGRectMake(60, 240, 50, 73.0); 
    [carte1J1 setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@.png",[d getlist1:0]] ] forState:UIControlStateNormal] ; 
    [carte1J1 addTarget:self action:@selector (clicCarte1J1) forControlEvents:UIControlEventTouchUpOutside]; 
    [self.view addSubview:carte1J1]; 

动作:

- (void)clicCarte1J1:(UIImageView *)slot1 { 

    [slot1 setImage:[UIImage imageNamed:@"K_spades.png"]]; } 

我的问题是,当我在carte1J1没什么单击发生,我应该对SLOT1的UIImageView的K_spades.png图像。

有这些问题:

  • 的@selector不符合实际的方法(在端需要冒号 “clickCarte1J1:”)
  • 你可能想UIControlEventTouchUpInside不UIControlEventTouchUpOutside
  • 点击方法假设参数是UIImageView,但它实际上是被点击的UIButton

要解决这个问题,首先在slot1上设置tag属性,吨的点击方法后可以找到它:

CGRect slot1Rect = CGRectMake(70, 90, 80, 110); 
UIImageView *slot1 = [[UIImageView alloc] initWithFrame:slot1Rect]; 
[slot1 setImage:[UIImage imageNamed:@"carte_dos_rouge.png"]]; 
slot1.opaque = YES; 
slot1.tag = 42; //use whatever number you like 
[self.view addSubview:slot1]; 
[slot1 release]; 

然后addTarget改成这样:

[carte1J1 addTarget:self action:@selector (clicCarte1J1) forControlEvents:UIControlEventTouchUpInside]; 

并更改点击的方法是:

- (void)clicCarte1J1 { 
    UIImageView *slot1 = (UIImageView *)[self.view viewWithTag:42]; 
    [slot1 setImage:[UIImage imageNamed:@"K_spades.png"]]; 
} 
+0

是的,是的,是的 非常感谢它! 标签是否需要?或者我们可以绕过? – ciwol 2010-10-18 17:42:18

+0

除非您为slot1定义ivar,以便您可以通过方法调用在整个类中引用它,否则必须使用标记。从技术上讲,您可以搜索self.view的子视图并查找UIImageView类型的视图,但这不仅仅是设置标记更重要。但最好的事情是将其定义为一个伊娃,并让丹雷这样的财产建议。 – Anna 2010-10-18 17:47:54

[carte1J1 addTarget:self action:@selector (clicCarte1J1) forControlEvents:UIControlEventTouchUpOutside]; 

...

- (void)clicCarte1J1:(UIImageView *)slot1 { 

    [slot1 setImage:[UIImage imageNamed:@"K_spades.png"]]; 
} 

是什么让你认为你想要的UIImageView的修改会奇迹般地获得通过该选择?因为它不会。此外,您已经按照方法clicCarte1J1指定了按钮,然后实施了,这是完全不同的方法名称。

你需要做的是为那个UIImageView制作一个@property,并在你的目标方法中以这种方式得到它。没有参数将方法名称更改为-(void)clickCarte1J1