2017-06-21 8 views
0

ボタンを配置した状態でSingleViewApplicationを作成しました。PopoverPresentationControllerがnilとして返される

ボタンをクリックすると、tableViewをポップオーバーとして表示する必要があります。 TableViewControllerはxibで作成されます。

問題はfilterDistanceViewController.popoverPresentationControllerはつねにnil

右方向への任意のヒントが高く評価されるように来ている上記のコード にコード

 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 
    } 

下記参照はnilとしてtableViewController.popoverPresentationControllerが常に来ています。

+0

Interface BuilderでVCをルートとして設定しましたか?どのボックスがルートビューコントローラであるかを示す矢印が表示されるボックスをオンにします。 – Pochi

+0

ボタンが配置されているViewCtrがrootviewCtrです。私はTableVCをrootVCとして作る必要がありますか? – Ekra

答えて

1

あなたは現在のViewControllerにpopoverPresentationViewControllerを提示する必要があるので、次の例のように、何も提示されていません。

@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

あなたは以下のように行うことができます。

@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

あなたのVCにmodalPresentationStyleを設定しているまで、popoverPresentationControllerプロパティがnilになります。アクセスする前にmodalPresentationStyleを設定してください。

関連する問題