2011-12-17 3 views
1

Dans mon application, j'ai créé 20 boutons avec une vue défilante, maintenant le problème est que je n'ai pas pu mettre en surbrillance le bouton sélectionné.Mettez en surbrillance les UIButtons créés dynamiquement?

Mon intention est de montrer le bouton pressé avec un regard différent de la normale. Si une autre touche est enfoncée, le précédent doit devenir normal:

UIButton *Abutton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
    [Abutton setTag:i-1]; 
    Abutton.frame = CGRectMake(30.0, 0+j, 40.0, 40.0); 
    [Abutton setTitle:@"" forState:UIControlStateNormal]; 
    Abutton.backgroundColor = [UIColor clearColor]; 
    [Abutton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal ]; 
    UIImage *buttonImageNormal = [UIImage imageNamed:@"image1.png"]; 
    UIImage *strechableButtonImageNormal = [buttonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0]; 
    [Abutton setBackgroundImage:strechableButtonImageNormal forState:UIControlStateNormal]; 
    UIImage *buttonImagePressed = [UIImage imageNamed:@"image2.png"]; 
    UIImage *strechableButtonImagePressed = [buttonImagePressed stretchableImageWithLeftCapWidth:12 topCapHeight:0]; 
    [Abutton setBackgroundImage:strechableButtonImagePressed forState:UIControlStateHighlighted]; 
    [Abutton addTarget:self action:@selector(buttonpressed:) forControlEvents:UIControlEventTouchUpInside]; 

    [scrollview addSubview:Abutton]; 

Enfin j'ai créé la méthode pour aButton pressée comme ci-dessous:

-(IBAction)buttonpressed:(id)sender{ 
     Abutton.highlighted=YES; 
     //..... 
     //..... 
} 

Si le faire comme cela, alors que le dernier bouton créé obtient dynamiquement a souligné. Ce n'est pas exactement ce que je voulais.

Répondre

0

Solution 1: Créez un NSSet avec des références à tous les boutons. Dans votre méthode buttonPressed, appelez le makeObjectsPerformSelector sur les boutons du NSSet, en les mettant dans l'état non mis en surbrillance.

Solution 2: Utilisez un UISegmentedControl. Cela semble être ce que devrait faire dans ce cas de toute façon.

+0

Merci Ben, est-ce qu'il y a un meilleur exemple d'utilisation de NSSet? – Satheesh

1

Je pense que vous devez remplacer votre code actuel pour le bouton enfoncé:

-(IBAction)buttonpressed:(id)sender{ 
UIButton *b = (UIButton *)sender; 
      b.highlighted = YES; 
      //..... 
      //..... 
    } 

Dans votre exemple, vous spécifiquement mise en évidence « AButton ». Ce code met en évidence le bouton appuyé.

Questions connexes