2012-05-22 5 views
3

Bonjour, J'ai un UIButton que j'ai créé par programmation, mais malheureusement, il ne fonctionne pas. Quand je clique sur le UIButton rien ne se passe. Je ne sais pas quel est le problème. Toute aide serait appréciée.Le bouton iOS créé par programme ne fonctionne pas

UIButton *connectedStories = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

//set the position of the button 
connectedStories.frame = CGRectMake(10, 10, 1900, 30); 
connectedStories.backgroundColor = [UIColor whiteColor]; 
[connectedStories setTitle:@"Button" forState:UIControlStateNormal]; 
[connectedStories setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
[connectedStories addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside]; 
[label setText:storyTitle]; 
[label1 setText:storyDescription]; 
[contentView addSubview:backGroundImageView]; 
[contentView addSubview:connectedStories]; 
[contentView addSubview:label]; 
[contentView addSubview:label1]; 

[viewContainer addSubview:contentView]; 
return contentView; 

- (void)buttonClicked 
{ 
    NSLog(@"button clicked"); 
} 
+0

est le bouton que vous voulez comparaissent il? Quel type de vue est contentView? Essayez d'appeler '[contentView setUserEnabled: YES];' et voyez si cela fonctionne –

+2

que donnent [contentView userInteractionEnabled] et [viewContainer userInteractionEnabled]? Peut-être que certains d'entre eux sont désactivés et vous ne recevrez pas d'événement. – alex

+0

La vue de contenu est juste un UIVIEW. et apparemment les deux méthodes ci-dessus-à-dire setUserEnabled ou userInteractionEnabled ne sont pas déclarés dans l'interface :( – CodeGeek123

Répondre

2

Je pense que les étiquettes reçoivent des touches au lieu du bouton. Ajouter userInteractionEnabled = NO; à vos étiquettes.

label.userInteractionEnabled = NO; 
label1.userInteractionEnabled = NO; 
+0

Oui mais non cela ne fonctionne pas non plus :(Définir aussi yes pour userinteractionenabled pour le bouton – CodeGeek123

+1

assurez-vous que containerView et viewContainer ont userInteractionEnabled = YES; – Moonkid

+0

OUI j'avais activé userinteraction activé dans la vue container mais j'ai oublié de le faire pour viewcontainer Réglage qui a fonctionné.Merci – CodeGeek123

0

Essayez de changer la partie supérieure de votre code à ceci:

CGRect frame = CGRectMake(10, 10, 1900, 30); 
UIButton *connectedStories = [[UIButton alloc] initWithFrame:frame]; 

//set the position of the button 
[connectedStories setBackgroundColor:[UIColor whiteColor]]; 
[connectedStories setTitle:@"Button" forState:UIControlStateNormal]; 
[connectedStories setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
[connectedStories addTarget:nil action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside]; 
+0

Et assurez-vous que les étiquettes ajoutées à la vue ne sont pas dans les mêmes limites que le bouton, sinon ils peuvent couvrir sur le bouton – achi

+0

J'ai couru ce code et cela fonctionne. S'il vous plaît nous donner plus d'informations si vous voulez notre aide. – achi

+0

Eli, ça marche maintenant. Reason étant UserInteractionEnabled n'a pas été défini sur yes pour deux vues que j'utilisais. – CodeGeek123

0

Il peut très bien être les suivants:

[contentView addSubview:backGroundImageView]; 
[contentView addSubview:connectedStories]; 
[contentView addSubview:label]; 
[contentView addSubview:label1]; 

Je suis sûr que vous devez les ajouter dans la commande suivante:

[contentView addSubview:backGroundImageView]; 
[contentView addSubview:label]; 
[contentView addSubview:label1]; 
[contentView addSubview:connectedStories]; 

Ceci C'est parce que lorsque vous appelez addSubview:, il l'ajoute à la fin de la liste des récepteurs de sous-vues et la sous-vue la plus récente apparaît en haut.

Vérifiez la Documentation UIView here

la raison pour que l'interaction soit pas détecté est que vous n'êtes pas passer le touchEvents par les autres sous-vues comme ils sont capturés par label1 et arrêter là.

Par défaut, la dernière sous-vue capture tous les événements tactiles et ne les transmet pas.

0

Ajouter deux points dans le dernier de votre méthode dans le sélecteur

[connectedStories addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    [label setText:storyTitle]; 
0
UIButton *custombutton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[custombutton addTarget:self 
       action:@selector(aMethod:) 
     forControlEvents:UIControlEventTouchUpInside]; 
[custombutton setTitle:@"Click" forState:UIControlStateNormal]; 
custombutton.frame = CGRectMake(80.0, 110.0, 160.0, 40.0); 
custombutton.titleLabel.textColor = [UIColor colorWithRed: 2.0f/255.0f green: 155.0f/255.0f blue: 213.0f/255.0f alpha:1]; 
[custombutton setImage:[UIImage imageNamed:@"hh.png"] forState:UIControlStateNormal]; 
[view addSubview:custombutton]; 
Questions connexes