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

2024-01-28

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

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

谢谢, 蒂姆


以下是我如何在 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 来选择所需的主题。 在这种情况下,用户选择一个主题并fireTimer0.5 秒后触发。在我强制 UI 重新绘制自身之前,这为其他 UI 的更新提供了很好的延迟。

  3. 在您需要对主题更改采取行动的任何地方收听通知。

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

  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];
    }
      

不要忘记在必要时放弃任何通知,并且您必须在 viewDidLoad 或类似的代码中编写代码才能在显示视图之前应用任何主题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将主题应用到 iPhone 应用程序的最佳方式 的相关文章

  • pdf文件文本阅读和搜索

    我想从 pdf 文件中读取文本并将文本搜索到 pdf 文件中 这是我知道的链接 这些都帮不了我 使用 Quartz 2D 解析 pdf 时获取文本位置 https stackoverflow com questions 3627745 ge
  • 如何使用 iPhone SDK 访问身份配置文件和证书?

    我正在尝试使用用户通过打开电子邮件附加的 cer p12 存储的证书 身份来验证我的应用程序上的用户身份 该证书显示在手机设置应用程序的 配置配置文件 组下 有没有什么方法可以使用iphone SDK访问证书 我尝试使用安全框架 但似乎只能
  • 如何发布和接收 NSNotifications(目标 C) |通知(Swift 中)?

    是否有一种易于理解的模式如何发送 NSNotification 目标 C 通知 Swift 中 以及如何接收通知 代码片段 文档关于这个主题写了大约 150 页 想看一个简单的例子 发送通知 NSNotificationCenter def
  • 如何使 UITextView 像 Notes 应用程序一样使用文本展开

    如何使 UITextView 随其内部的文本展开 你可以试试这个 UITextView textView your UITextView NSString text the text that you want to place in th
  • 如何在 iOS 中通过 3G 连接创建无线热点

    如果我愿意 我将如何创建一个像这样的应用程序MyWi http intelliborn com mywi html 即 WiFi 网络共享应用程序 实现该功能需要哪些步骤 我需要使用哪些框架 库 我们的目标不是尝试将此应用程序放入应用程序商
  • F# 对于 OO 或命令式来说缺少什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • iPhone 应用程序名称有哪些限制? (它们记录在[哪里]?!)

    我花了 2 天 和很多头 墙重击 终于发现临时分发对我不起作用的原因是因为我的应用程序名称包含 UTF 8 字符 我仍然对像苹果 iPhone 这样广泛的国际平台如何禁止这种行为感到困惑 i e 如果我的应用程序是一款中国围棋游戏 我是否可
  • 对 Objective-c 对象数组进行排序

    所以我有一个自定义课程Foo有许多成员 interface Foo NSObject NSString title BOOL taken NSDate dateCreated 在另一堂课上我有一个NSMutableArray包含这些对象的列
  • 为什么每次用户启动应用程序时都要注册推送通知?

    在Apple文档中你可以找到下面这句话 应用程序应在每次启动时进行注册 并向其提供者提供当前令牌 它调用 registerForRemoteNotificationTypes 来启动注册过程 因此 当我在应用程序中实现推送通知时 我必须注册
  • 检索旋转的 UIImageView 的所有 4 个坐标

    如何获取 UIImageView 的 4 个坐标 我知道可以得到CGRect以及origin x和origin y 但是如何找到所有4个角呢 编辑 我正在旋转 UIImageViews 这就是我问的原因 P 您可以添加矩形的宽度和高度来获取
  • UIView transitionFromView:如何在转换过程中实现黑色背景?

    我使用下一个代码 UIView transitionFromView viewA toView viewB duration 1 0 options UIViewAnimationOptionTransitionFlipFromLeft c
  • 如何显示AVPictureInPictureController?

    我正在尝试使用播放视频AV画中画控制器最近在IOS9 使用此代码 AVPlayer AVPlayer AVPlayer playerWithURL url AVPlayerLayer layer AVPlayerLayer playerLa
  • 可以使用两个独立的 SQLite 数据库吗?

    我有一个 sqlite 数据库 其中存储用户定义的信息和用户只读的信息 我觉得将来可能需要修改只读信息 并且我不想进行整个数据迁移 有没有一种方法可以使用单独的 sqlite 数据库来存储只读信息 该数据库可以轻松替换 如果是这样 您能否就
  • 点击后退按钮时,iCarousel 会显示在上一页

    当我按下后退按钮时 这iCarousel仍然显示 1 秒 为什么会发生这种情况以及如何阻止这种情况 我已经使用故事板创建了 iCarosel 视图 void viewDidUnload super viewDidUnload self ca
  • Xcode 4 .xib 创建 iPad 版本

    我有一台 iPhone xib 我想将其变成 iPad xib 在 Xcode 3 中 有一个 创建 iPad 版本 菜单选项 我如何在 Xcode 4 中执行此操作 我目前调整了 xib 的大小 但是当我打开模拟项目 导航栏等 时 它会将
  • iPad 上的 ios11 iphone 应用程序图标丢失

    我有一个仅限 iPhone 的应用程序 但它也可以在 iPad 上以兼容模式运行 毫不奇怪 但是当我更新了ios11的应用程序后 iPad上的应用程序图标丢失了 这是我尝试过的 在iPhone模拟器上启动 出现图标 在 iPad 模拟器上启
  • Winforms 风格/UI 外观和感觉提示

    从多年的 asp net 开发回到 winforms 应用程序 寻找有关如何 设计 winforms 的建议和技巧 类似于我在 asp net 中使用 CSS 母版页的方式 我对如何在一处更新某些类型的控件的字体 颜色感兴趣 如何保持布局的
  • 在 iPhone 5 的横向模式下启动启动画面

    我们的通用应用程序仅适用于横向模式 我们需要为 iPhone 4 和 iPhone 5 添加启动画面 对于 iPhone 5 的肖像 我们使用 email protected cdn cgi l email protection 如何为 i
  • Xcode 4 Core Data:如何使用在数据模型编辑器中创建的获取属性

    如何在 Xcode 4 中实现获取的属性 Here is an example of two entities a book and a page 我按照此处的指南创建了一个获取的属性 该属性使用变量 FETCH SOURCE 引用来自源实
  • phonegap 插件,用于从库中选择视频

    我需要能够从库中选择视频并将其上传到我的服务器 我可以录制新视频 captureVideo 并上传 文件传输 没问题 但我似乎找不到任何方法来打开视频库并选择视频然后上传 有什么办法可以做到这一点吗 以某种方式更改 MediaType na

随机推荐