【发布时间】:2017-05-18 06:30:01
【问题描述】:
我正在尝试将 ViewController 显示为 iPhone 上的弹出框。我已经在 SO 和其他网络上浏览过几个答案,但到目前为止都没有。我编写了一个简单的应用程序来测试它。
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。
运行这个,我希望弹出视图控制器显示在“完成”按钮下。相反,蓝色视图控制器全屏显示。
有没有办法改变这种行为?
【问题讨论】:
-
您必须设置
sourceView或sourceRect例如ppc?.sourceView = sender as! UIView -
@Bilal
ppc?.barButtonItem = navigationItem.rightBarButtonItem负责这一点
标签: ios iphone swift uipopovercontroller