如何在 DialogViewController (Monotouch.Dialog) 上设置背景颜色

Posted

技术标签:

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

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

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

到目前为止我所尝试的:

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

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

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

我一定错过了一些基本的东西!我一直在查看 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;
    

【讨论】:

以上是关于如何在 DialogViewController (Monotouch.Dialog) 上设置背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

UIRefreshControl 未在 iOS 10 以下显示带有 DialogViewController 的 Xamarin

永远不会调用重写的 DialogViewController 方法?

将 DialogViewController 推送到 ViewController 到 NavigationController 堆栈会给出 2 页

Monotouch - DialogViewController 的 TableView 背景也改变了元素的背景

带有 MonoTouch.Dialog 的 UISplitViewController

如何在图像中找到明亮区域(以及如何在图像中找到阴影区域)