我正在使用最新的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
上面代码中的最后一行,其中赋值是happing抛出编译错误(“不包含..的定义”)。
这是什么意思? Monotouch是不支持的(在Objective-C中似乎支持,因为我在网上看到很多例子)?或者我错过了一些东西。
感谢您的帮助。
答案 0 :(得分:3)
好抓!看起来MonoTouch目前缺少对popoverBackgroundViewClass
(iOS5中的新功能)的绑定。
我会考虑实施它。如果您想在http://bugzilla.xamarin.com填写错误报告,一旦完成,您将收到通知(只需一个快速的错误报告,其中包含此问题的链接就足够了)。我还应该能够为您提供修补程序或解决方法。
<强>更新强>
在MonoTouch 5.3+(一旦发布),您将能够执行以下操作:
popoverController.PopoverBackgroundViewType = typeof (MyPopoverBackgroundView);
请注意,您无法创建自己的实例,因为它需要从本机端完成(因此您只能告诉UIPopoverController
要创建哪种类型)。
您还需要遵循UIPopoverBackgroundView
的所有要求,这意味着导出所需的选择器(它比简单继承更复杂,因为它还需要static
方法)。 E.g。
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;
}
}