我已经想出如何为标题栏设置色调并为我的所有视图设置背景图像,但对于我的生活,我无法弄清楚如何为节标题等设置默认的UILabel颜色。我不想谜语我的代码将所有颜色设置为UIColor.Black手工。有没有办法获得不同的UIElements列表以及为每个UIElements设置默认值(颜色,字体,大小)的方法?我对标签的颜色特别感兴趣,但任何其他信息对未来都非常有帮助。
答案 0 :(得分:1)
从iOS 5开始,有一个UIAppearance
类来处理许多UI元素的全局外观。
MonoTouch的工作方式是在这些类型上存在一种名为Appearance
的内部类型。您可以直接从中设置属性(使用MonoDevelop的代码完成很容易)。 E.g。
UILabel.Appearance.BackgroundColor = UIColor.Blue;
可悲的是,它并未涵盖您对每个控件可能需要的所有内容(在iOS 5之前也不会有效)。
答案 1 :(得分:0)
这有点hacky,但这样做很有用,它适用于子类UIView
的各种其他UI控件。这假设您有自己的子类DialogViewController
(我的中有很多方便省时的东西,我的所有视图都将我的DVC子类化为工作)。
protected void ForAllSubviewUIControlsOfType<TUIType>(Action<TUIType, int> actionToPerform) where TUIType : UIView
{
processSubviewUIControlsOfType<TUIType>(this.View.Subviews, actionToPerform, 0);
}
private void processSubviewUIControlsOfType<TUIType>(UIView[] views, Action<TUIType, int> actionToPerform, int depth) where TUIType : UIView
{
if (views == null)
return;
if (actionToPerform == null)
return;
foreach (UIView view in views)
{
if (view.GetType () == typeof(TUIType))
{
actionToPerform((TUIType)view, depth);
}
if (view.Subviews != null)
{
foreach (UIView subview in view.Subviews)
{
processSubviewUIControlsOfType<TUIType>(view.Subviews, actionToPerform, depth + 1);
}
}
}
}
要解决原始问题并更改部分中所有标签的文本颜色,您需要执行以下操作:
public override void ViewDidAppear (bool animated)
{
base.ViewDidAppear (animated);
ForAllSubviewUIControlsOfType<UILabel>((label, depth) => {
if ( /*label.Superview is UIView && label.Superview.Superview is UITableView*/ depth == 1 )
{
label.TextColor = UIColor.Black;
}
});
}
在我决定返回int depth
计数以查看它是否在视图上之前,注释掉的部分是确定标签内是否存在标签的内容。
编辑:好像这不是一个完美的解决方案......这些元素的深度计数会有所不同。我必须在第二天或第二天找到更好的东西。