2017-06-21 4 views
0

Créé un SingleViewApplication dans lequel j'ai placé un bouton. Maintenant je clique sur le bouton J'ai besoin d'afficher un tableauVoir comme popover. Le TableViewController est créé en xib.PopoverPresentationController à zéro

La question est tableViewController.popoverPresentationController est toujours aussi nul voir ci-dessous le code

 let filterVC = TableViewController(nibName: "TableViewController", bundle: nil) 
    var filterDistanceViewController = UINavigationController(rootViewController: filterVC) 
    filterDistanceViewController.preferredContentSize = CGSize(width: 300, height: 200) 
    let popoverPresentationViewController = filterDistanceViewController.popoverPresentationController 
    popoverPresentationViewController?.permittedArrowDirections = .any 


    if let pop = filterDistanceViewController.popoverPresentationController { 
     pop.delegate = self 
    } 

dans le code ci-dessus filterDistanceViewController.popoverPresentationController est toujours à venir comme nul

Toute indication dans la bonne direction sera très appréciée.

+0

Avez-vous défini votre VC en tant que root sur Interface Builder? en cochant la case qui fait apparaître une flèche indiquant lequel est votre contrôleur de vue racine. – Pochi

+0

Le ViewCtr à partir duquel le bouton est placé est le rootviewCtr. Ai-je besoin de faire TableVC en tant que rootVC? – Ekra

Répondre

1

Vous n'êtes pas quoi que ce soit la présentation, vous devez présenter le popoverPresentationViewController sur le viewcontroller actuel, par exemple:

@IBAction func importantButtonPressed(_ sender: UIButton) { 
     let tableViewController = UITableViewController() 
     tableViewController.modalPresentationStyle = .popover 

     present(tableViewController, animated: true, completion: nil) 

     if let pop = tableViewController.popoverPresentationController { 
      pop.delegate = self 
     } 

    } 
1

Vous pouvez le faire comme ci-dessous.

@IBAction func popoverBtnPressed(_ sender: Any) { 

    let vc2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController2") 
    vc2.modalPresentationStyle = .popover 
    vc2.popoverPresentationController?.delegate = self 
    vc2.popoverPresentationController?.barButtonItem = popoverBtn 
    vc2.popoverPresentationController?.sourceRect = .zero 
    present(vc2, animated: true, completion: nil) 
} 
0

Jusqu'à ce que vous avez défini une modalPresentationStyle sur votre CV, la propriété popoverPresentationController sera nil. Assurez-vous que vous avez défini modalPresentationStyle avant d'y accéder.