2010-11-21 5 views
0

Versuch, meinen popover aus der Zelle Tableview anzuzeigen, dieUIPopover Ausgabe

ausgewählt wurden
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]; 

[switchV release];

Was mache ich falsch?

+0

Es ist besser, wenn Sie den Code in Ihrer Frage veröffentlichen und erklären, was passiert, was Sie erwarten. – Anna

+0

Ich postete es, es ist der Pastie Link :) – Anthony

+0

Ist dieser Code in didSelectRowAtIndexPath? Sie haben die Zelle deklariert, setzen sie jedoch nicht. – Anna

Antwort

0

Sie haben eine Schaltfläche in einer Tabellenansichtszelle und Sie möchten ein Popover anzeigen, das auf diese Zelle zeigt, wenn Sie auf die Schaltfläche klicken.

Zuerst die Taste, um die Zelle in cellForRowAtIndexPath fügen etwas wie folgt aus:
(muss nicht abgerundet rect sein) über

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]; 

Ein wichtiger Punkt ist, dass in der @selector, Es gibt einen Doppelpunkt nach profileUser (dies teilt der Schaltfläche mit, dass sie einen Verweis auf sich selbst als ersten Parameter an profileUser senden soll). Diese Referenz kann verwendet werden, um herauszufinden, welche Zelle ausgewählt wurde.

Die profileUser:

-(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]; 
} 

Wenn möglich, lassen Sie die Pfeilrichtung wie UIPopoverArrowDirectionAny und lassen Sie es der beste Ort, herauszufinden, es zu setzen: Methode sollte so etwas wie dieses.

Edit:
Um die popover mit dem Pfeil zeigt auf die Taste anstelle der Zelle nach oben zeigt, verwenden Sie diese:

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

jedoch in Abhängigkeit von der Position der Zelle auf dem Bildschirm, Das Popover sieht unter der Schaltfläche möglicherweise nicht richtig aus. Verwenden Sie "Any" anstelle von "Up", außer Sie sind sich der Ergebnisse sicher.

Beachten Sie auch, dass Sie einen Verweis auf den Popover-Controller für die spätere Veröffentlichung (in Dealloc) speichern sollten, da andernfalls die [Pop-Version] in der Methode einen Absturz verursachen könnte. Ein detailliertes Beispiel finden Sie unter sample app Popovers.

+0

Hey Mann danke! Nun, wie würde ich es mit dem Tastenrahmen zeigen? Sagen Sie, wo sich die Schaltfläche in der Zelle befindet, in der sie angezeigt wird, direkt darunter? Ich habe versucht, seinen Rahmen zu verwenden, aber das zeigt nur die neueste Zelle und nicht die anderen. – Anthony

+0

Die Antwort wurde aktualisiert. Nicht sicher, was du meinst "zeigt auf der neuesten Zelle und nicht die anderen". – Anna