【问题标题】:How to set the background color on a DialogViewController (Monotouch.Dialog)如何在 DialogViewController (Monotouch.Dialog) 上设置背景颜色
【发布时间】:2011-11-10 20:19:33
【问题描述】:

环境:使用 Monotouch 和 Monotouch.Dialog 库创建 iPad 应用程序。

我一直试图在 DialogViewController 上设置背景颜色,但无济于事。我的应用程序中有多个视图正在加载和卸载。对于非他们,我设法设置背景颜色。

到目前为止我所尝试的:

  • 在我的应用程序的主窗口上设置背景颜色 --> 效果很好。
  • 创建一个简单的 UIView,给它一个大小,设置背景颜色并将其加载到窗口中 --> 工作正常。

但是,一旦我加载了 DialogViewController(带有关联的视图),背景颜色总是灰色的。 DialogViewController 从 Monotouch.Dialog 框架中使用。

我将 DialogViewController 推到导航控制器上,以显示一组布局在表格视图中的按钮。

我一定错过了一些基本的东西!我一直在查看 Monotouch.Dialog 代码并尝试了其他一些方法,但到目前为止还没有解决我的问题。

非常感谢任何帮助。

鲍里斯

【问题讨论】:

    标签: ios ipad xamarin.ios background-color monotouch.dialog


    【解决方案1】:

    您实际上需要将背景视图设置为空。这是表格视图后面的视图,例如 MonoTouch.Dialog 中的分组视图

    http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html

    这是它的子类可能的样子:

     using System;
     using System.Drawing;
     using System.IO;
     using MonoTouch.Foundation;
     using MonoTouch.CoreGraphics;
     using MonoTouch.Dialog;
     using MonoTouch.UIKit;
    
     namespace MyNameSpace{
    
         public class MySpecialDialogViewController : DialogViewController {
    
           public MySpecialDialogViewController (UITableViewStyle style, RootElement root) 
                  : base (style, root) 
             {
             }
    
            public override void LoadView ()
            {
                base.LoadView ();
                TableView.BackgroundView = null;
                 TableView.BackgroundColor = UIColor.Black;
            }
         }
    
      }
    

    【讨论】:

    • +1 Miguel 的解决方案过去确实有效,我只能假设最近的 iOS/MT 更改意味着您现在需要将 BackgroundView 设置为 null
    【解决方案2】:

    这在 MonoTouch.Dialog 文档的“自定义 DialogViewController”部分中进行了描述。

    你需要继承DialogViewController,像这样:

    public class ColoredViewController : DialogViewController {
        [...]
    
        public override LoadView ()
        {
            base.LoadView ();
            TableView.BackgroundColor = UIColor.Clear;
            ParentViewController.View.BackgroundColor = UIColor.Red;
        }
    }
    

    【讨论】:

    • 我已经实现了你的代码。但是遇到了同样的问题,TableDialog 一直是灰色的。您能否更详细地解释您的解决方案或告诉我如何解决它?在 Git 上的 MonoTouch.Dialog 示例中,我遇到了同样的问题。使用 iPhone 模拟器一切都很好,但是当我使用 ipad 模拟器启动应用程序时,背景是灰色的。
    • @Shabby 请参阅下面 Eric 的回答,我认为最近发生了变化,这意味着您需要将 BackgroundView 属性设置为 null。米格尔你能确认一下吗?
    【解决方案3】:

    是的,Eric 的解决方案现在有效。如果您想使用图像而不是颜色,我在下面修改了他的内容。

            public override void LoadView () 
        {
            base.LoadView ();
            this.TableView.BackgroundView = null;
            //this.TableView.BackgroundColor = UIColor.Black;
            var background = UIImage.FromFile ("Images/down.png");
            this.TableView.BackgroundColor = UIColor.FromPatternImage(background);
        }
    

    【讨论】:

      【解决方案4】:

      我发现使用其他解决方案时模式会重复,因此设置背景视图对我来说更可取:

          public override void LoadView ()
          {
              base.LoadView ();
              UIImage tickImage = UIImage.FromBundle ("1.jpg");
              UIImageView backgroundImageView = new UIImageView (this.View.Bounds);
              backgroundImageView.Image = tickImage;
              backgroundImageView.ContentMode = UIViewContentMode.BottomLeft;  //your preference
              TableView.BackgroundView = backgroundImageView;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-27
        • 2013-03-13
        • 2010-12-11
        • 2013-07-21
        • 1970-01-01
        • 2020-01-25
        • 1970-01-01
        相关资源
        最近更新 更多