2017-07-06 7 views
1

ボタンがあるセルを持つテーブルビューコントローラがあります。UIPopoverPresentationController内のボタンをクリックすると、ビューコントローラに移動します。

このボタンをクリックすると、UIPopoverPresentationControllerとしてビューコントローラが表示されます。

このポップオーバーコントローラには、YESとNOの2つのボタンがあります。

はいクリックすると、別のView Controllerにセグをしたいのですが、いいえをクリックすると、ポップオーバーコントローラが却下されます。

いいえクリックするとポップオーバーが解除されますが、クリックすると必要なビューコントローラに移動しません。

ビューコントローラのview()メソッドが呼び出されましたが、問題は、新しいView Controllerが表示されていないことです。 YES、ポップオーバーが閉じますをクリックするだけで

が、次の以前のビューコントローラに

ままでは

@IBAction func onTapNoButton(_ sender: UIButton) { 
     self.dismiss(animated: true, completion: {}) 
    } 

    @IBAction func onTapYesButton(_ sender: UIButton) { 
     let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     let viewController = storyboard.instantiateViewController(withIdentifier: "View") as! ViewController 
present(viewController, animated: true, completion: nil) 

    } 
クラス

func onTapPickButton(sender: UIButton) { 

let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     let popoverViewController = storyboard.instantiateViewController(withIdentifier: "ConfirmDialogViewController") as! ConfirmDialogViewController 
     popoverViewController.preferredContentSize = CGSize(width: view.frame.width/1.33, height: view.frame.height/2.34) 
     popoverViewController.modalPresentationStyle = UIModalPresentationStyle.popover 
     let popover: UIPopoverPresentationController = popoverViewController.popoverPresentationController! 
     popover.sourceView = self.view 
     popover.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0)   
     popover.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0) 
     popover.delegate = self 

     present(popoverViewController, animated: true, completion: nil) 
} 

ポップオーバービューコントローラクラス

TableViewController私のコードです

ご協力いただければ幸いです。ありがとうございました。ボタンアクションYESで

答えて

0

popOverおよび完了ブロックでは、あなたが「YES」ボタンが選択されたときにキャッチするための閉鎖(終了ハンドラ)またはデリゲートのいずれかを作成することができ、新規のViewController

@IBAction func onTapYesButton(_ sender: UIButton) { 
       let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
       let viewController = storyboard.instantiateViewController(withIdentifier: "View") as! ViewController 
       self.dismiss(animated: true, completion: { 
         self.present(viewController, animated: true, completion: nil) 
       }) 

      } 
+0

次のエラーが発生しています。 上に表示しようとしましたが、ビューはウィンドウ階層にありません! –

0

を提示却下。 Popover ViewControllerから任意のデータをキャプチャしたい場合に便利です。たとえば、次のように

完了ハンドラ

class ConfirmDialogViewController: UIViewController { 
    open var didSelectYesHandler: ((_ selectedData: String) ->())? 

    public init(for sender: UIView, didSelectYesHandler: ((_ selectedData: String) ->())? = nil) { 
     super.init(nibName: nil, bundle: nil) 

     modalPresentationStyle = .popover 
     self.sender = sender 
     self.didSelectDataHandler = didSelectDataHandler 

     guard let popoverPC = popoverPresentationController else { return } 
     popoverPC.sourceView = sender 
     popoverPC.sourceRect = sender.bounds 
     popoverPC.delegate = self 
    } 

    @IBAction func onTapYesButton(_ sender: UIButton) { 
     dismiss(animated: true, completion: nil) 
     didSelectDataHandler?("YES") 
    } 

    // MARK: - PopoverPC Delegate Methods 

    func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle { 
     return UIModalPresentationStyle.none 
    } 
} 

委任

protocol ConfirmDialogViewControllerDelegate: class { 
    func didSelectYes(_ selectedDate: String) 
} 

class ConfirmDialogViewController: UIViewController { 
    weak var delegate: ConfirmDialogViewControllerDelegate? 

    @IBAction func onTapYesButton(_ sender: UIButton) { 
     dismiss(animated: true, completion: nil) 
     delegate?.didSelectData("YES") 
    } 
} 

// In your current view controller set 
popoverViewController.delegate = self 

ボーナス

チェあなたが選択のためのデータリストを含むpopoverを持っていたい場合は、このlibraryを出してください。

関連する問題