在 Monotouch 中为整个应用程序设置默认 UILabel 颜色

本文关键字:设置 默认 UILabel 颜色 应用程序 Monotouch | 更新日期: 2023-09-27 18:32:38

我已经想出了如何设置标题栏的色调,并为我的所有视图设置了背景图像,但是对于我的一生,我无法弄清楚如何为部分标题等设置默认的UILabel颜色。我不想手动将我的所有颜色设置为UIColor.Black的代码。有没有办法获取不同UIE的列表以及为每个UIE设置默认值(颜色,字体,大小)的方法?我对标签的颜色特别感兴趣,但任何其他信息对未来都非常有帮助。

在 Monotouch 中为整个应用程序设置默认 UILabel 颜色

从 iOS 5 开始,有一个UIAppearance类来处理许多 UI 元素的全局外观。

它与MonoTouch一起工作的方式是,在这些类型上存在一种称为Appearance的内部类型。你可以直接从中设置属性(使用MonoDevelop的代码完成很容易)。例如

UILabel.Appearance.BackgroundColor = UIColor.Blue;

可悲的是,它并没有涵盖每个控件可能需要的所有内容(在iOS 5之前也不起作用)。

这有点笨拙,但这确实可以解决问题,并且它适用于子类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计数以查看它是否在视图上。

编辑:似乎这不是完美的解决方案...这些元素的深度计数各不相同。在接下来的一两天里,我必须想出更好的办法。