2016-05-09 5 views
1

У меня возникли проблемы с реализацией Xamarin iOS Popovers.Popovers и Xamarin iOS

Насколько я сейчас, они доступны через новый класс UIPopoverPresentationController, описанный в документации компании Apple (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIPopoverPresentationController_class/)

Мой код-то вроде этого:

public partial class PopoverSettings : UIViewController 
{ 
    public PopoverSettings() //: base ("PopoverSettings", null) 
    { 
    } 

    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 
     View.Frame = new CoreGraphics.CGRect(0,0,100,100); 
     this.PreferredContentSize = new CoreGraphics.CGSize (10, 10); 
     View.BackgroundColor = UIColor.Red; 
    } 
} 

И я пытаюсь создать это от

var myPop = new PopoverSettings(); 
myPop.ModalInPopover = true; 
myPop.ModalPresentationStyle = UIModalPresentationStyle.Popover; 
var pc = (UIPopoverPresentationController)myPop.PresentationController; 
pc.SourceView = navigation; 
pc.SourceRect = new CGRect(0,0,100,100); 
this.PresentViewController(myPop, true, null);   

в результате работает, но я получаю ПОЛНОЭКРАННЫЙ View Controller, а не компонент «поповер»!

Кто-нибудь знает, почему это происходит? Благодаря!

+2

Вы пытаетесь сделать это на iPad или iPhone? Посмотрите на это: http://stackoverflow.com/questions/25319179/uipopoverpresentationcontroller-on-ios-8-iphone – pnavk

+0

Да, но это решение включает в себя множественное наследование (от UIViewController и UIPopoverPresentationControllerDelegate), которое не поддерживается в .NET. –

+0

Чтобы обойти это ограничение, вы можете реализовать 'IUIPopoverControllerDelegate' вместо этого и просто переопределить соответствующие методы делегатов. https://developer.xamarin.com/api/type/MonoTouch.UIKit.IUIPopoverControllerDelegate/ – pnavk

ответ

0

Если вы реализуете это на iPhone, инфраструктура автоматически изменит ваш PresentationStyle на полноэкранный режим. Чтобы предотвратить это, вам необходимо реализовать обратный вызов интерфейса IUIPopoverPresentationControllerDelegate 'adaptivePresentationStyleForPresentationController'.

[Export("adaptivePresentationStyleForPresentationController:")] 
public UIModalPresentationStyle GetAdaptivePresentationStyle(UIPresentationController forPresentationController) 
{ 
    return UIModalPresentationStyle.None; 
} 

Тогда вы должны убедиться, что вы установили делегат свойство PresentationController к опорному класса, где реализуется обратный вызов.

pc.delegate = this; 

Рамка теперь вызовет ваш обратный вызов, и вы можете заставить его сделать его popover.