菜鸟教程小白 发表于 2022-12-13 11:41:45

ios - 缺少 UIPopoverController 的 PopoverBackroundViewClass 属性


                                            <p><p>我正在使用最新的 Monotouch 5.2.4。作为我开发的一部分,我正在尝试更改 PopoverController 的背景边框。根据苹果文档,这可以使用从 UIPopoverBackgroundView 类继承的自定义类进行管理。</p>

<p>所以我创建了如下这样的类</p>

<pre><code>public class MyPopoverBackground : UIPopoverBackgroundView
{
    public MyPopoverBackground ()
    {
      UIImageView imgBackground = new UIImageView();
      UIImage img = UIImage.FromFile(@&#34;SupportData/Popbg.png&#34;);
      img.StretchableImage(18,10);
      imgBackground.Image = img;
      this.AddSubview(imgBackground);
    }   
}
</code></pre>

<p>创建此类后,我试图将此 View 与 ViewController 中的 Popup 对象相关联。定义如下</p>

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

<p>上面代码的最后一行,分配发生的地方会引发编译错误(“不包含...的定义”)。</p>

<p>这是什么意思?这在 Monotouch 中不支持吗(在 Objective-C 中似乎支持,因为我在网上看到了很多示例)?或者我错过了什么。</p>

<p>感谢您的帮助。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>好收获!它看起来像 <a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIPopoverController_class/Reference/Reference.html#//apple_ref/occ/instp/UIPopoverController/popoverBackgroundViewClass" rel="noreferrer noopener nofollow"><code>popoverBackgroundViewClass</code></a> 的绑定(bind)MonoTouch 目前缺少(iOS5 中的新功能)。</p>

<p>我会考虑实现它。如果您想在 <a href="http://bugzilla.xamarin.com" rel="noreferrer noopener nofollow">http://bugzilla.xamarin.com</a> 填写错误报告完成后您会收到通知(只需一个带有此问题链接的快速错误报告就足够了)。我应该也可以给你一个修补程序或解决方法。</p>

<p><strong>更新</strong></p>

<p>在 MonoTouch 5.3+(一旦发布)中,您将能够执行以下操作:</p>

<pre><code>popoverController.PopoverBackgroundViewType = typeof (MyPopoverBackgroundView);
</code></pre>

<p>请注意,您不能创建自己的实例,因为它需要从 native 端完成(因此您只告诉 <code>UIPopoverController</code> 要创建哪种类型)。</p>

<p>您还需要遵循 <code>UIPopoverBackgroundView</code> 的所有要求,这意味着导出所需的选择器(这比简单地继承要复杂一些,因为它也需要 <code>static</code> 方法) .例如</p>

<pre><code>    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; }

      
      static new float GetArrowHeight ()
      {
            return 10f;
      }

      
      static new float GetArrowBase ()
      {
            return 10f;
      }

      
      static new UIEdgeInsets GetContentViewInsets ()
      {
            return UIEdgeInsets.Zero;
      }
    }
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 缺少 UIPopoverController 的 PopoverBackroundViewClass 属性,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/9311914/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/9311914/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 缺少 UIPopoverController 的 PopoverBackroundViewClass 属性