我在自定义UIView画布上做了一些绘图,而不是在视图底部有一组按钮以允许用户选择形状,我想让用户做一个长按手势,然后有一个弹出式菜单出现,他们可以选择不同的形状。我在xCode中看不到这样的东西,尽管我认为在iOS中有类似的东西。当电池电量不足和通知时,我不希望出现警告弹出窗口。
我已经研究过使用UIPopoverController,但我对其他一些我已经读过的Stack Overflow问题以及Apple提供的文档感到困惑。
答案 0 :(得分:0)
将该按钮与viewController连接并将popover作为segue后,您需要准备。以下是为了准备popover segue的代码。
<script type="text/javascript">
$(document).ready(function () {
var top = $('#quote-icon').offset().top - parseFloat($('#quote-icon').css('marginTop').replace(/auto/, 0));
$(window).scroll(function (event) {
var y = $(this).scrollTop();
//if y > top, it means that if we scroll down any more, parts of our element will be outside the viewport
//so we move the element down so that it remains in view.
if (y >= top) {
var difference = y - top;
$('#quote-icon').css("top",difference);
}
});
});
</script>
请记住,如果你有一个iPhone,那么popover将全屏显示,所以你可以使用它修复它,让我们说一个带有一些特定元素的文本。
这会将弹出窗口固定为文本中元素的大小。
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
if let identifier = segue.identifier
{
switch identifier
{
case History.SegueIdentifier:
if let tvc = segue.destinationViewController as? TextViewController
{
if let ppc = tvc.popoverPresentationController
{
ppc.delegate = self
}
tvc.text = "\(diagnosticHistory)"
}
default: break
}
}
}
我在不同的视图控制器中有2个,但我想它会起作用。您还需要实施@IBOutlet weak var textView: UITextView!
{
didSet
{
textView.text = text
}
}
var text : String = ""
{
didSet
{
textView?.text = text
}
}
override var preferredContentSize : CGSize
{
get
{
if textView != nil && presentingViewController != nil
{
return textView.sizeThatFits(presentingViewController!.view.bounds.size)
}
else
{
return super.preferredContentSize
}
}
set {super.preferredContentSize = newValue}
}
}
和
UIPopoverPresentationControllerDelegate
到你的第一个viewController。
答案 1 :(得分:0)
segue
创建barButtonItem
到MenuViewCobtroller
类型&#39;呈现为Popover&#39; 在MenuViewController
覆盖preferredContentSize
as:
override var preferredContentSize : CGSize
{
get
{
return CGSize(width: 88 , height: 176)
}
set
{
super.preferredContentSize = newValue
}
}
在我的情况下,我将返回宽度为100且大小为200的CGSize
。您可以设置这些值,以便适合您的浮动菜单内容。
4.在初始/源视图控制器中,prepare(for segue: sender)
方法集self
为popoverPresentationController
委托:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ShowMenuSegue" {
if let tvc = segue.destination as? MenuViewController
{
tvc.delegate = self
if let ppc = tvc.popoverPresentationController
{
ppc.delegate = self
}
}
}
}
源视图控制器必须符合UIPopoverPresentationControllerDelegate
并实现以下方法:
extension ViewController: UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.none
}
}
那就是它。你有浮动菜单。希望这会有用。
答案 2 :(得分:0)
我在上面使用了Masture的方法,它对我有用(谢谢!),但是对像我这样的其他新手有一些注意事项:
(1)确保将“ ShowMenuSegue”(或选择的任何内容)作为情节提要的标识符放在情节提要中,并且
(2)我必须添加
var delegate: MainViewController!
在MenuViewController中(以MainViewController作为您的源视图控制器),以使tvc.delegate = self
正常工作