2013-01-31 6 views
4

Je crée des boutons par programme et je souhaite ensuite ajouter une fonctionnalité qui permet de rester en surbrillance quand on appuie dessus/sur pression, à moins d'être à nouveau appuyé dessus. Ce que je fais maintenant, c'est créer les boutons et ensuite essayer d'ajouter un IBAction. Cependant, le problème est que j'ai la création de mon bouton dans une méthode et que je ne suis pas sûr de savoir comment référencer le bouton dans mon IBAction. Voici mon code:IBAction & Buttons par programmation

UIButton* testButn = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [testButn setFrame:CGRectMake(0, 135, 40, 38)]; 
    [testButn setImage:[UIImage imageNamed:@"test_butn_un.png"] forState:UIControlStateNormal]; 
    [testButn setImage:[UIImage imageNamed:@"test_butn_pressed.png"] forState:UIControlStateHighlighted]; 
[testButn addTarget:self action:@selector(staypressed:) forControlEvents:UIControlEventTouchUpInside]; 
[self.contentview addSubview:testButn 

-(IBAction)staypressed:(id)sender{ 

//Not sure what to do here, since this method doesn't recognize testButn, How do I reference testButn 
+0

UIButton * theButton = (UIButton *) expéditeur; theButton.selected = true; .selected peut désactiver le bouton alors peut-être simplement changer le style. – BooRanger

+0

Ne fonctionne toujours pas. Voici ce que j'ai maintenant: - (IBAction) stayPressed: (id) expéditeur {UIButton * testButn = (UIButton *) expéditeur; [testButn setHighlighted: OUI]; } –

Répondre

9

L'expéditeur est testButn. Vous devriez changer le type d'argument de stayPressed de (id) à (UIButton *)

À moins qu'une méthode d'action ne soit connectée à plusieurs classes d'objets différentes, il est préférable de remplacer l'ID par la classe d'objets que vous utilisez. Cela peut être utile si vous raccordez des objets dans IB, car cela ne vous permettra pas de l'accrocher au mauvais type d'objet. Le fait que cela ne fonctionne pas n'est pas parce qu'il ne reconnaît pas votre bouton. Votre approche est erronée. Je pense que vous devez avoir une action connectée pour toucher, et peut-être définir l'état sélectionné sur OUI. Dans votre définition de bouton, vous devez définir un imageForState: pour l'état sélectionné. La façon dont vous le faites maintenant, cette méthode n'est pas appelée jusqu'à la retouche.

Quelque chose comme ceci:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UIButton* testButn = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [testButn setFrame:CGRectMake(0, 135, 40, 38)]; 
    [testButn setImage:[UIImage imageNamed:@"New_PICT0019.jpg"] forState:UIControlStateNormal]; 
    [testButn setImage:[UIImage imageNamed:@"New_PICT0002.jpg"] forState:UIControlStateSelected]; 
    [testButn addTarget:self action:@selector(stayPressed:) forControlEvents:UIControlEventTouchDown]; 
    [self.view addSubview:testButn]; 
} 

-(void)stayPressed:(UIButton *) sender { 
    if (sender.selected == YES) { 
     sender.selected = NO; 
    }else{ 
     sender.selected = YES; 
    } 
} 
+0

Hmm, c'est ce que j'ai en ce moment et le bouton ne reste pas en surbrillance. (IBAction) stayPressed: (UIButton *) expéditeur {UIButton * testButn = (UIButton *) expéditeur; [testButn setHighlighted: OUI]; } –

+0

@DavidWest, voir mon edit – rdelmar

+0

si vous voyez mon code original, j'ai une image pour UIControlStateHighlighted. Mon action est connectée à Touchupinside. Quand je tape sur le bouton, il est surligné mais il ne reste pas en surbrillance. –

2

Vous devez convertir l'expéditeur en UIButton.

- (IBAction)staypressed:(id)sender 
{ 
    UIButton *theButton = (UIButton*)sender; 

    //do something to theButton 
} 
+0

Ne fonctionne toujours pas. Voici ce que j'ai maintenant: - (IBAction) stayPressed: (id) expéditeur { UIButton * testButn = (UIButton *) expéditeur; [testButn setHighlighted: YES]; } –

+0

ok, mais qu'est-ce qui ne fonctionne pas? La fonction est-elle en cours d'exécution? ou obtenez-vous une erreur? – Fogmeister

2
UIButton* testButn = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [testButn setFrame:CGRectMake(0, 135, 40, 38)]; 
    [testButn setImage:[UIImage imageNamed:@"test_butn_un.png"] forState:UIControlStateNormal]; 
    [testButn setImage:[UIImage imageNamed:@"test_butn_pressed.png"] forState:UIControlStateHighlighted]; 
    [testButn addTarget:self action:@selector(staypressed:) forControlEvents:UIControlEventTouchUpInside]; 
    testButn.tag = 1; 
    [self.contentview addSubview:testButn 

-(IBAction)staypressed:(id)sender 
{ 
    if ([sender tag]==1) 
    { 
     somecodes... 
    } 
}