2010-07-03 2 views
3

Je crée une application pour l'iPad et je souhaite afficher un UIPopoverController avec une flèche pointant sur le bouton de divulgation de détail de la ligne à laquelle il appartient. Je veux le faire dans la méthode tableView:accessoryButtonTappedForRowWithIndexPath:. Actuellement, j'ai cela, avec un CGRect mannequin:Afficher un UIPopoverController à partir d'un bouton de divulgation de détail dans UITableViewCell

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { 
    // Dismiss in the case it shows itself somewhere else 
    [addFeedPopup dismissPopoverAnimated:YES]; 

    // Set up 
    TNSubscribeToFeedController *subscribeToFeedController = [[TNSubscribeToFeedController alloc] initWithNibName:@"SubscribeToFeed" bundle:nil]; 
    UINavigationController *subscribeToFeedNavigationController = [[UINavigationController alloc] initWithRootViewController:subscribeToFeedController]; 
    subscribeToFeedController.title = @"Subscribe to feed"; 
    subscribeToFeedController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:nil]; 
    subscribeToFeedController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:nil]; 
    /* 
    * Note that we use the UINavigationController pure for the nices UINavigationBar. 
    */ 

    // Show in popup 
    addFeedPopup = [[UIPopoverController alloc] initWithContentViewController:subscribeToFeedNavigationController]; 
    addFeedPopup.popoverContentSize = CGSizeMake(480, 320); 
    [addFeedPopup presentPopoverFromRect:CGRectMake(0, 0, 20, 20) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; 

    // Memory 
    [subscribeToFeedNavigationController release]; 
    [subscribeToFeedController release]; 
} 

En outre, lorsque le UITableView est en mode édition, le bouton d'information de détail est d'environ 60 pixels à gauche, puisque je l'utiliser pour mettre en place mes lignes:

if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"SectionTwoCell"] autorelease]; 
} 
cell.textLabel.text = [NSString stringWithFormat:@"Feed %d", indexPath.row]; 
cell.detailTextLabel.text = @"Description"; 
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 
cell.editingAccessoryType = cell.accessoryType; 
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^// 
//  TWO LINES BACK DEAR SO USER  // 

Quelqu'un peut-il m'aider avec ce problème? Merci.


Oh, et il est également possible de désactiver le défilement et désactiver tout sélectionner jusqu'à ce que le UIPopoverController est fermé (perfectionnisme)?

Répondre

9

Pour faire ce que vous voulez, vous avez besoin d'un accessoireVoir et configurer l'accessoireType n'en crée pas. Cependant, cela fonctionnera si vous créez un bouton et le définissez comme cell.accessoryView.

Créer et mettre la accessoryView lorsque la cellule est créée:

... 
    UIButton *disclosureButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
    [disclosureButton addTarget:self action:@selector(discloseDetails:) forControlEvents:UIControlEventTouchUpInside]; 
    cell.accessoryView = disclosureButton; 
    ... 

Remplacer tableView: accessoryButtonTappedForRowWithIndexPath: avec discloseDetails :. Cela ressemble beaucoup à ce que vous avez avant, donc je ne l'ai mis les changements ci-dessous:

- (void) discloseDetails:(UIButton *)sender { 
    ... 
    UITableViewCell *cell = (UITableViewCell *) sender.superview; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; // if needed 
    [addFeedPopup presentPopoverFromRect:cell.accessoryView.bounds inView:cell.accessoryView permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; 
    ... 
} 

Si vous n'avez pas besoin de la cellule, il peut être encore plus simple:

- (void) discloseDetails:(UIButton *)sender { 
    ... 
    [addFeedPopup presentPopoverFromRect:sender.bounds inView:sender permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; 
    ... 
} 

Voici ce que il ressemble à

enter image description here

Questions connexes