Отсутствует свойство PopoverBackroundViewClass для UIPopoverController - PullRequest
2 голосов
/ 16 февраля 2012

Я использую последнюю версию Monotouch 5.2.4. В рамках своей разработки я пытаюсь изменить фоновую границу контроллера Popover. Согласно документации Apple, этим можно управлять с помощью пользовательского класса, унаследованного от класса UIPopoverBackgroundView.

Итак, я создал такой класс, как показано ниже

public class MyPopoverBackground : UIPopoverBackgroundView
{
    public MyPopoverBackground ()
    {
        UIImageView imgBackground = new UIImageView();
        UIImage img = UIImage.FromFile(@"SupportData/Popbg.png");
        img.StretchableImage(18,10);
        imgBackground.Image = img;
        this.AddSubview(imgBackground);
    }   
}

После создания этого класса я пытаюсь связать это представление с объектом Popup, который есть в моем контроллере представления. Это определено как ниже

UIPopoverController popup = new UIPopoverController(searchPage);
popup.popOverBackroundViewClass = new MyPopoverBackground(); //This line throws compilation error

Последняя строка в приведенном выше коде, где присвоение является случайным, выдает ошибку компиляции («не содержит определения для ..»).

Что это значит? Разве это не поддерживается в Monotouch (кажется, поддерживается в Objective-C, как я вижу много примеров в Интернете)? Или я что-то упускаю.

Ценю вашу помощь.

1 Ответ

3 голосов
/ 16 февраля 2012

Хороший улов!Похоже, что привязка для popoverBackgroundViewClass (новинка в iOS5) в настоящее время отсутствует в MonoTouch.

Я посмотрю, как ее реализовать.Если вы хотите заполнить отчет об ошибке в http://bugzilla.xamarin.com, вы получите уведомление, как только это будет сделано (достаточно краткого отчета об ошибке со ссылкой на этот вопрос).Я также мог бы дать вам исправление или обходной путь.

ОБНОВЛЕНИЕ

В MonoTouch 5.3+ (после выпуска) вы сможете сделать что-то вроде:

popoverController.PopoverBackgroundViewType = typeof (MyPopoverBackgroundView);

Обратите внимание, что вы не можете создать свой собственный экземпляр, так как это нужно сделать с нативной стороны (поэтому вы просто указываете UIPopoverController, какой тип создавать).

Вы такженеобходимо соблюдать все требования для UIPopoverBackgroundView, что означает экспорт требуемых селекторов (это немного сложнее, чем простое наследование, поскольку для него также требуются методы static).Например,

    class MyPopoverBackgroundView : UIPopoverBackgroundView {

        public MyPopoverBackgroundView (IntPtr handle) : base (handle)
        {
            ArrowOffset = 5f;
            ArrowDirection = UIPopoverArrowDirection.Up;
        }

        public override float ArrowOffset { get; set; }

        public override UIPopoverArrowDirection ArrowDirection { get; set; }

        [Export ("arrowHeight")]
        static new float GetArrowHeight ()
        {
            return 10f;
        }

        [Export ("arrowBase")]
        static new float GetArrowBase ()
        {
            return 10f;
        }

        [Export ("contentViewInsets")]
        static new UIEdgeInsets GetContentViewInsets ()
        {
            return UIEdgeInsets.Zero;
        }
    }
...