2016-06-02 6 views
-1

Mein Szenario ist so. Ich habe eine Tableview-Zelle, die ein Button.If Feuer es Menü wie die Quelle auf die Schaltfläche unterAbrufen eines PopOver aus einem Popover für eine iOS-Anwendung

enter image description here

für das obige Menü popover wird Popout hat die extreme Rechte jeder Zelle ist appearning.

Ich habe eine andere Tabellenansicht namens diplayAccounts. Beim Klicken auf die Zelle des Popover-Menüs (d. H. Ansichtshierarchie) muss der displayAccounts View-Controller als Popover angezeigt werden. Mein Zweifel ist, dass das die Quelle dafür sein sollte.

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
menuTapped(self) 
} 

das Verfahren menuTapped als

func menuButtonTapped(sender: AnyObject) 
{ 
    let storyboard : UIStoryboard = UIStoryboard(name: "Storyboard", bundle: nil) 
    let vc = storyboard.instantiateViewControllerWithIdentifier("HierarchyTableViewController") as! HierarchyTableViewController 
    vc.modalPresentationStyle = UIModalPresentationStyle.Popover 
    let popover: UIPopoverPresentationController = vc.popoverPresentationController! 
    popover.sourceView = sender as? UIView 
    popover.delegate = self 
    presentViewController(vc, animated: true, completion:nil) 
} 

Und der Fehler, der mir

folgt

enter image description here Bitte helfen Ich erhalte.

+0

„Jetzt möchte ich eine weitere popover auf Klick des viewHierarchy bekommen "Was hast du damit gemeint? – Alexi

+0

Ich habe eine andere Tabellenansicht namens diplayAccounts. Beim Klicken auf die Zelle des Popover-Menüs (d. H. Ansichtshierarchie) muss der displayAccounts View-Controller als Popover angezeigt werden. Mein Zweifel ist, dass das die Quelle dafür sein sollte. –

Antwort

0

Es ist nicht gute Idee, Pop in einem anderen popover präsentiert über (von mobilem Apple-Human Interface Guidelines)

Das Beste, was Sie tun können, wie ist

In Pop über View-Controller-Klasse

  • Implementieren Sie ein Delegate-Protokoll in der View-Controller-Klasse, die die Liste der Elemente anzeigt, wie Sie im Anhang gezeigt.
  • Fügen Sie innerhalb dieses Delegate-Protokolls eine Rückrufmethode mit den Parametern hinzu, die die Details der ausgewählten Zelle enthalten.
  • Fügen Sie die Delegate-Eigenschaft im View-Controller der Popover-Klasse hinzu.
  • Rufen Sie die Delegate-Methode vom Zellauswahlereignis auf.

In Zellklasse, die die Schaltfläche anzeigt, von der popover präsentiert wird

(dh die Zelle 44087 und 111 im Bild oben die Anzeige)

  • Initialisiere die Delegatobjekt vor pop präsentierenden Über
  • Implementieren Sie die im Delegate-Protokoll deklarierte Delegate-Methode, um das Auswahlereignis zu erhalten.
  • Zeigen Sie den anderen Pop über Sie wollten.

    UPDATE

Dies wird die popover View-Controller, die Liste der Elemente zeigt, wie Sie oben

PopOverWithListItemsViewController gezeigt.h Datei

#import <UIKit/UIKit.h> 

@protocol PopoverWithListItemsViewDelegate <NSObject> 

- (void)didSelectedListItemAtIndex:(NSInteger)index; 

@end 

@interface PopOverWithListItemsViewController : UIViewController 

@property (nonatomic, weak) id<PopoverWithListItemsViewDelegate> delegate; 

@end 

In der Tabellendarstellung Auswahlereignis, fügen Sie den Anruf delegieren wie

NSInteger indexOfSelectedItem = 4;// jus for demo setting index as 4 
[self.delegate didSelectedListItemAtIndex:indexOfSelectedItem]; 

Und in der Klasse, von der Sie die Liste popover präsentiert, fügen Sie den folgenden

Schritt 1

Die Klasse, aus der Sie die po präsentieren p über sollte der Delegierten bestätigen, wie folgt

@interface ViewController() <PopoverWithListItemsViewDelegate> // let ViewController is the class from which you presenting the pop over

Step2

// Let this be the cell's button tap event from which you presenting the pop over 
- (IBAction)buttonTapEvent:(id)sender 
{ 
    // Presenting pop over sections 
    PopOverWithListItemsViewController *listItemsPopOverVC = [[PopOverWithListItemsViewController alloc] init]; 
    listItemsPopOverVC.delegate = self; 
    // pop over presenting with listItemsPopOverVC as popover's view controller 
} 

Schritt 3

// Delegate method implementation. 
- (void)didSelectedListItemAtIndex:(NSInteger)index 
{ 
    // Here we get the index of the selected cell in the popover. 
    // Present the new popover from here, after customizing the new pop over contents. 
} 
+0

können Sie bitte einen Code als Demo zur Verfügung stellen? @Alex –

+0

Siehe das Update. – Alexi

+0

im dritten Schritt, ich werde Code für das nächste Popover schreiben, aber die Schwierigkeit, die ich hier finde, ist, wie kann ich den Knopf als Quelle hier setzen. Ich habe die Referenz nicht richtig @Alex –