iPhoneでPopoverとしてViewControllerを表示しようとしています。私はすでにSOやその他のウェブ上でいくつかの回答をしてきましたが、これまでに何も働いていませんでした。私はこれをテストする簡単なアプリを書いた。iOS 10を搭載したiPhoneのUIPopoverPresentationController
ViewController.swift:
import UIKit
class ViewController: UIViewController, UIPopoverPresentationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(clicked(_:)))
}
func clicked(_ sender: Any) {
let vc = UIViewController()
vc.view.backgroundColor = UIColor.blue
vc.preferredContentSize = CGSize(width: 200, height: 200)
vc.modalPresentationStyle = .popover
present(vc, animated: true, completion: nil)
let ppc = vc.popoverPresentationController
ppc?.permittedArrowDirections = .any
ppc?.delegate = self
ppc?.barButtonItem = navigationItem.rightBarButtonItem
}
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return .none
}
func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
return .none
}
}
ストーリーボードはNavigationControllerに埋め込まれた空のViewControllerを有しています。
これを実行すると、ポップオーバービューコントローラが「完了」ボタンの下に表示されることが予想されました。代わりに、青色のView Controllerがフルスクリーンで表示されます。
この動作を変更する方法はありますか?
:
だけの行の前に例えば 'ppc?.sourceView = sender as! UIView' – Bilal
@Bilal line 'ppc?.barButtonItem = navigationItem.rightBarButtonItem'はそのことを処理します。 – mohak