2010-10-18 104 views
0

我正在開發一個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圖像。

回答

0

有這些問題:

  • 的@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

0
[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