我应该在哪里放置我的应用程序范围的 UI 自定义

Posted

技术标签:

【中文标题】我应该在哪里放置我的应用程序范围的 UI 自定义【英文标题】:Where should I place my application wide UI customization 【发布时间】:2013-03-24 09:22:40 【问题描述】:

我创建了一个类来完成自定义外观的所有工作。班级是UIAppearance 代表。

UI 自定义当前会影响,

    导航栏 搜索栏 标签栏

所有这些元素都不会随Views 而变化,因为我无法预见我可能对其中任何一个有不同风格的情况。

我可以在哪里以及如何将它放置在应用程序范围内,这样我就不必从任何地方调用这些方法(一次调用以影响 UI 调整)?

通过子类化? AppDelegate 是一个很好的候选者吗? 导入主题类并手动调用方法

是否可以一次性调用这些自定义项?

【问题讨论】:

【参考方案1】:

您可以在-applicationDidFinishLaunching 中执行此操作。

当您在 class 上调用 appearance 时,

UINavigationBar 这样的 UIKit 类会为您提供一个外观代理

[[UINavigationBar appearance] setTintColor:myColor];myColor 设置为所有导航栏的 tintColor。

有关详细信息,请参阅UIAppearance documentation。

【讨论】:

是的,我正在使用 UIAppearance 代理。我有所有的背景图片。我真的可以在-applicationDidFinishLaunching 中做吗?这可能会使有问题的班级失去画面。 是的,applicationDidFinishLaunching 是正确的地方。您希望此代码在每次启动应用程序时只运行一次。此外,最好将所有外观自定义设置在一个地方。 你说的class out of picture是什么意思? 为少数几个基本封装在少数方法中的 UI 自定义代码创建一个类并没有多大意义。如果可以从applicationDidFinishLaunching 完成,则可以丢弃类概念。为什么不在那里有代码?【参考方案2】:

您可以使用像 SharedManager 这样的 singleTon 类,在其中创建所有这些对象,它将在您的应用程序中可用。

// 第一步:创建一个名为“SharedManager.h”的文件

#import <Foundation/Foundation.h>

@interface SharedManager : NSObject

    UINavigationBar *navBar;
    UISearchBar *searchBar;


@property (nonatomic, retain) UINavigationBar *navBar;
@property (nonatomic, retain) UISearchBar *searchBar;

+(SharedManager *)sharedInstance;

@end

// 第二步:创建文件:“SharedManager.m”

#import "SharedManager.h"

static SharedManager *_sharedManager;
@implementation SharedManager

@synthesize navBar , searchBar;

+(SharedManager *)sharedInstance

    if(_sharedManager == nil)
    
        _sharedManager = [[SharedManager alloc] init];

        // Create Navigation Bar
        _sharedManager.navBar = [[UINavigationBar alloc] init];

        // Create Search Bar
        _sharedManager.searchBar = [[UISearchBar alloc] init];
    

    return _sharedManager;


@end

// 要访问对象,请使用以下代码, #import "SharedManager.h"

 [[SharedManager sharedInstance].navBar];

它会返回 NavigationBar 的对象

【讨论】:

以上是关于我应该在哪里放置我的应用程序范围的 UI 自定义的主要内容,如果未能解决你的问题,请参考以下文章

我在哪里放置 C++ 自定义异常代码?

在哪里放置 bash 完成脚本

在哪里放置需要从数据库中获取数据的域逻辑

干净的架构——在哪里放置输入验证逻辑? [关闭]

我应该在哪里将我的自定义域指向环境 URL 或 LoadBalancer?

以编程方式将自定义范围添加到Azure B2C