2010-10-18 4 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 ничего не происходит, я должен иметь изображение K_spades.png на Slot1 UIImageView.

ответ

0

Есть эти проблемы:

  • @selector не соответствует действительному метод (необходимо двоеточие в конце "clickCarte1J1:")
  • вы, вероятно, хотите UIControlEventTouchUpInside не UIControlEventTouchUpOutside
  • метод нажмите предполагается, что параметр UIImageView, но на самом деле это будет UIButton, который был нажат.

Чтобы исправить это, сначала установите свойство тега на slot1, чтобы Метод нажмите Ton может найти его позже:

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

+0

Если вы не определяете ivar для slot1, чтобы вы могли ссылаться на него во всем классе через вызовы методов, вам придется использовать тег. Ну, технически вы могли бы искать в subviews self.view и искать представление типа UIImageView, но это больше, чем просто установка тега. Но лучше всего определить его как ивара и создать такое свойство, как Дэн Рэй. – Anna

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

...

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

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

Что заставляет вас думать, что UIImageView вы хотите изменить волшебно получить передается селектором? Потому что это не так. Кроме того, вы указали свою кнопку по методу clicCarte1J1, а затем внедрили , который является совсем другим именем метода.

Что вам нужно сделать, это сделать @property для этого UIImageView и получить его таким образом внутри вашего целевого метода. И измените имя метода на -(void)clickCarte1J1 без аргумента.

Смежные вопросы