2010-11-21 28 views
0

Essayer d'afficher mon popover de la cellule tableView qui a été sélectionnéUIPopover Problème

UITableViewCell *cell; 
UserProfile *switchV = [[UserProfile alloc] initWithNibName:nil bundle:nil]; 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:switchV]; 
    UIPopoverController *pop = [[UIPopoverController alloc] initWithContentViewController:navController]; 
[pop presentPopoverFromRect:cell.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

[Communiqué switchV];

Qu'est-ce que je fais mal?

+0

C'est mieux si vous postez le code dans votre question et expliquez ce qui se passe par rapport à ce que vous attendez. – Anna

+0

Je l'ai posté, c'est le lien pastie :) – Anthony

+0

Est-ce que ce code est dans didSelectRowAtIndexPath? Vous avez déclaré une cellule mais ne la définissez pas. – Anna

Répondre

0

Vous disposez d'un bouton dans une cellule de vue de table et vous souhaitez afficher un survol orienté vers cette cellule lorsque le bouton est enfoncé.

D'abord, ajouter le bouton à la cellule cellForRowAtIndexPath en utilisant quelque chose comme ceci:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button setFrame:CGRectMake(100, 0, 100, 30)]; 
[button setTitle:@"Button" forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(profileUser:) 
         forControlEvents:UIControlEventTouchUpInside]; 
[cell.contentView addSubview:button]; 

(ne doit pas être rect arrondi) Un point important est que ci-dessus dans le @selector, il y a deux points après profileUser (ceci indique au bouton d'envoyer une référence à lui-même en tant que premier paramètre à profileUser). Cette référence peut être utilisée pour déterminer quelle cellule a été sélectionnée.

La ProfilForumsVidéosInterviewsPodcastNewsletterAnciens: méthode doit être quelque chose comme ceci:

-(void)profileUser:(UIButton *)button 
{ 
    UITableViewCell *cell = (UITableViewCell *)[[button superview] superview]; 
    //first superview is cell.contentView 
    //second superview is cell 

    UserProfile *switchV = [[UserProfile alloc] initWithNibName:nil bundle:nil]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:switchV]; 
    UIPopoverController *pop = [[UIPopoverController alloc] initWithContentViewController:navController]; 

    [pop presentPopoverFromRect:cell.frame inView:self.view 
     permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

    [switchV release]; 
    [navController release]; 

    self.popoverController = pop; //save in property for later release 

    [pop release]; 
} 

Si possible, laissez la direction de la flèche comme UIPopoverArrowDirectionAny et laissez-le trouver le meilleur endroit pour le mettre.

Edit:
Pour afficher la popover avec la flèche pointant vers le haut du bouton au lieu de la cellule, utilisez ceci:

[pop presentPopoverFromRect:button.frame inView:cell 
    permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

Toutefois, en fonction de la position de la cellule à l'écran, le popover peut ne pas avoir l'air juste sous le bouton. Utilisez "Any" au lieu de "Up", sauf si vous êtes sûr des résultats. Notez également que vous devez enregistrer une référence au contrôleur popover pour une version ultérieure (dans dealloc), sinon la [release pop] de la méthode peut provoquer un plantage. Pour un exemple détaillé, voir le sample app Popovers.

+0

Salut, merci! Maintenant, comment pourrais-je le montrer en utilisant le cadre des boutons? Dites où le bouton est sur la cellule thats où il montre, juste en dessous? J'ai essayé d'utiliser son cadre mais cela ne se voit que sur la dernière cellule et pas sur les autres. – Anthony

+0

Mise à jour de la réponse. Vous ne savez pas ce que vous entendez par "des spectacles sur la dernière cellule et pas les autres". – Anna