将主题应用于iPhone应用程序的最佳方式

时间:2010-04-28 15:33:15

标签: iphone user-interface themes

您好我正在尝试使用主题切换器编写一些iPhone应用程序,用户可以选择主题来更改背景颜色,alpha,图像和一些按钮的外观和感觉(大小,图像,甚至位置)。

应用主题的最佳方式是什么?

谢谢, 添

2 个答案:

答案 0 :(得分:6)

以下是我如何实现改变FemCal主题的能力。我已经以代码片段的形式包含了一些细节。

  1. 创建一个存储颜色,图像等的单例ThemeMgr类。在需要时获取单例。

    @interface ThemeMgr : NSObject 
    {
    // selected color and image
    NSString * selectedColor;
    NSString * selectedPicture;
    // dictionaries for color and image
    NSDictionary * colorData;
    NSDictionary * imageData;
    NSDictionary * backgroundData;
    // names
    NSArray * colors;
    NSArray * images;
    // themes
    UIColor * tintColor;
    UIImageView * panelTheme;
    UIColor * tableBackground;
    }

  2. 使用通知广播主题更改。我使用@“ThemeChange”作为通知。

    - (void)fireTimer:(NSTimer *)timer
    {
    NSNotification * themeChange = [NSNotification notificationWithName:@"ThemeChange" object:nil];
    [[NSNotificationQueue defaultQueue] enqueueNotification:themeChange postingStyle:NSPostWhenIdle];
    }
    显然,您将有一些UI来选择所需的主题。 在这种情况下,用户选择一个主题,并在0.5秒后触发fireTimer。在强制UI重绘之前,这为其他UI提供了一个很好的延迟。

  3. 在需要处理主题更改的任何位置收听通知。

    // listen for change notification
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateAppearance:) name:@"ThemeChange" object:nil];
    我只有几个视图,所以我在我使用的每个控制器中编写了代码,但你可以使用objective-C的强大功能来混合代码以更好的方式处理它。

    < / LI>
  4. 实施代码以根据主题实际重绘视图。

    - (void)updateAppearance:(NSNotification *)notification
    {
    // background for grouped table view
    ThemeMgr * themeMgr = [ThemeMgr defaultMgr];
    // change color and reload
    [self.tableView setBackgroundColor:[themeMgr tableBackground]];
    [self.tableView reloadData];
    self.navigationController.navigationBar.tintColor = [themeMgr tintColor];
    }
    

  5. 不要忘记在必要时撤消任何通知,并且您必须在viewDidLoad或类似代码中编写代码以在显示视图之前应用任何主题。

答案 1 :(得分:0)

没有得到任何答案。我用事件和singlton实现了它。基本上,单例设置对象会将更改分派给观察者,观察者会根据事件更新GUI。 我记得有一种方法可以听取实例变量的变化,但忘了怎么做。无论如何,我目前的方式对我来说非常好。