2013-05-15 1 views
0

J'ai un UITableViewCell personnalisé qui contient un UIButton et la cellule elle-même répond à UIControlEventTouchUpInside. La cellule se comporte comme il se doit dans le simulateur iPhone et toutes les versions de l'iPhone SAUF pour l'iPhone5. Pour une raison quelconque, sur l'iPhone5, la cellule ne répond qu'aux touches situées tout en bas de la cellule. En fait, il est extrêmement difficile pour l'utilisateur d'obtenir que la cellule réponde à un contact, ils doivent appuyer plusieurs fois près du bas de la cellule pour l'amener à réagir. En outre, l'UIButton ne répond tout simplement pas sur l'iPhone5. Je devrais également ajouter que cette erreur n'a commencé à se produire qu'après l'application a été optimisée pour s'adapter à l'écran de la rétine plus grand de l'iPhone5. Je suis enclin à croire que cela a quelque chose à voir avec le dimensionnement de la cellule, mais son apparence sur l'iPhone 5 ressemble exactement comme il se doit. J'ai également essayé de résoudre ce problème en créant un NIB séparé à instancier quand un iPhone5 est utilisé qui tire parti de la fonctionnalité "Auto-layout" Interface Builder, mais cela n'a rien résolu.Réponse tactile utilisateur limitée UITableViewCell sur iPhone5 uniquement

Voici le code qui instatiates la cellule UITableView personnalisée dans la ViewController.m:

// Configure the cell... 
switch (indexPath.section) { 
    case 0:     // Full name 
    { 

     UINib *nib = [UINib nibWithNibName:@"ProfileNameCell" bundle:nil]; 

     cell = [[nib instantiateWithOwner:nil options:nil] objectAtIndex:0]; 

     [[(ProfileNameCell *)cell nameLabel] setText:[NSString stringWithFormat:@"%@ %@", 
                 [[[Engine sharedInstance] currentUser] firstname], 
                 [[[Engine sharedInstance] currentUser] lastname]]]; 

     [[(ProfileNameCell *)cell imageButton] addTarget:self 
                action:@selector(selectUserPhoto:) 
             forControlEvents:UIControlEventTouchUpInside]; 


     if ([[[Engine sharedInstance] currentUser] photoURL] != nil) { 
      [(ProfileNameCell *)cell setImageForURL: 
       [NSURL URLWithString:[[[Engine sharedInstance] currentUser] photoURL]]]; 
     } 

     break; 
    }... 

Et voici le code pour le View.m:

@implementation ProfileNameCell 

@synthesize imageView=imageView_; 
@synthesize imageButton; 
@synthesize nameLabel; 

- (void)awakeFromNib { 

    [(CALayer *)[self.imageView layer] setCornerRadius:5.0]; 
} 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { 

self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 

if (self) { 
    // Initialization code. 
    [(CALayer *)[imageView_ layer] setCornerRadius:5.0]; 
} 

    return self; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 

    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state. 
} 


- (void)setImageForURL:(NSURL *)url { 
     [NSThread performBlockInBackground:^{ 

      //Code that is executed when the UIButton is pressed... 
    } 

- (void)dealloc { 
    [imageView_ release]; 
    [imageButton release]; 
    [nameLabel release]; 
     [super dealloc]; 
} 


@end 

Répondre

1

Sonne comme un problème le redimensionnement automatique d'une présentation de la vue de la table contenant la cellule (pas la cellule elle-même, et probablement pas la vue de la table). Vérifiez que toutes les vues sont automatiquement redimensionnées ou redimensionnées dans le code pour utiliser la hauteur totale disponible. Vous pouvez également ajouter un point d'arrêt lorsque la cellule est affichée (tableView:didEndDisplayingCell:forRowAtIndexPath:), puis utiliser gdb pour examiner les aperçus et leurs cadres (po [cell superview]).

+0

Merci! C'était ça! –

Questions connexes