2012-07-24 4 views
0

J'ai un problème étrange avec les boutons placés dans les cellules de la table sur l'iPad.Le bouton de la cellule ne répond pas sur l'iPad

Voici deux captures d'écran pour une meilleure compréhension (le bouton est sur le côté droit et a une couleur de fond blanc):

iPhone

iPad

Pas de problème avec l'iPhone, mais sur la iPad ce bouton ne répond pas. Le positionnement semble être correct, car il est dessiné correctement.

C'est le code de ma coutume UITableViewCell:

rightButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[rightButton setContentMode:UIViewContentModeCenter]; 
[rightButton setBackgroundColor:[UIColor whiteColor]]; 
int xPos = buttonWidth-rightButton.frame.size.width; 
[rightButton setFrame:CGRectMake(xPos, 0, buttonHeight, buttonHeight)]; 
[self.contentView addSubview:rightButton]; 

//buttonWidth = 310, buttonHeight = 60 

L'image et la cible est définie par une autre classe:

[cell.rightButton setImage:[UIImage imageNamed:@"options.png"] forState:UIControlStateNormal]; 
[cell.rightButton addTarget:self action:@selector(showOptions:) forControlEvents:UIControlEventTouchUpInside]; 

J'ai aussi essayé ce après avoir placé tous les éléments à la cellule

[self.contentView bringSubviewToFront: rightButton]; 

pour s'assurer que le bouton est le plus haut.

Ne fonctionne pas.

Des idées à ce sujet?


Je n'ai toujours pas trouvé de solution.

Ce que je l'ai fait dans l'intervalle:

  • visualise tous les objets placés dans la cellule (pour afficher chevauchement indésirable)
  • interaction utilisateur désactivé sur tous les autres objets cellule

D'autres idées ?

+0

montrez-nous le code comment vous avez ajouté 'UIButton' à' UITableViewCell' et comment vous définissez l'action pour 'UIButton', s'il vous plaît. – holex

+0

Pouvez-vous donner plus de détails, ou écrire le code de création de bouton. – Nilesh

+0

Mis à jour mon message avec le code. –

Répondre

0

Essayez d'abord ceci:

rightButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[rightButton setContentMode:UIViewContentModeCenter]; 
[rightButton setBackgroundColor:[UIColor whiteColor]]; 
int xPos = buttonWidth-rightButton.frame.size.width; 
[rightButton setFrame:CGRectMake(xPos, 0, buttonHeight, buttonHeight)]; 
[self.contentView addSubview:rightButton]; 
[self.contentView bringSubviewToFront: rightButton] 
[self.contentView bringSubviewToFront: rightButton]; 
rightButton.userInteractionEnabled = YES; 

[cell.rightButton setImage:[UIImage imageNamed:@"options.png"] forState:UIControlStateNormal]; 
[cell.rightButton addTarget:self action:@selector(showOptions:) forControlEvents:UIControlEventTouchUpInside]; 
[cell.rightButton setUserInteractionEnabled:YES]; 

Ou vous pouvez également ajouter un geste du robinet à votre bouton, il va résoudre le problème: Au lieu de cette ligne,

[cell.rightButton addTarget:self action:@selector(showOptions:) forControlEvents:UIControlEventTouchUpInside]; 

Ecrire ce,

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showOptions:)]; 
cell.rightButton addGestureRecognizer:tap]; 
[cell.rightButton setUserInteractionEnabled:YES]; 
+0

J'ai essayé toutes vos suggestions. Mais toujours pas de réponse sur l'iPad. –

0

D'accord, j'ai trouvé som ething:

Pour l'iPad, le bouton ne répond que s'il est placé entre les 320 premiers pixels horizontalement.

Voici ce que le débogueur dit lorsque vous touchez le bouton (placé loin sur le côté droit):

(lldb) po touches 
(NSSet *) $1 = 0x08249cd0 {(
<UITouch: 0x82c63d0> phase: Began tap count: 1 window: <UIWindow: 0x8266ca0; 
frame = (0 0; 768 1024); opaque = NO; autoresize = RM+BM; 
layer = <UIWindowLayer: 0x8266d60>> view: <SBMultiCell: 0x82cb8a0; baseClass = UITableViewCell; 
frame = (0 0; 744 93); autoresize = W; layer = <CALayer: 0x82cb830>> 
location in window: {713, 123} previous location in window: {713, 123} 
location in view: {701, 44} previous location in view: {701, 44} 
)} 

(lldb) po rightButton 
(UIButton *) $2 = 0x082cd500 <UIButton: 0x82cd500; 
frame = (658 0; 86 86); opaque = NO; layer = <CALayer: 0x82cd5e0>> 

L'emplacement de contact est exactement entre les dimensions des boutons et aussi tout est dessiné correctement. Et comme je l'ai écrit avant, il n'y a pas d'éléments superposés ou similaires ...

Questions connexes