如何在 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 背景也改变了元素的背景