iOS --思考appearance主題

一、前言

  • 我們經(jīng)常設(shè)置UINavigationBar、UITabBar等主題,我們有沒有想過,為什么我們可以給它們設(shè)置主題屬性呢?你可能回答是系統(tǒng)提供了這些主題,對,但是,又是那些對象,可以設(shè)置主題屬性呢?

二、主題設(shè)置的前提

1. 那些控件和類,可以設(shè)置主題呢?
  • 回答:只要遵守了UIAppearance協(xié)議的類,都可以設(shè)置主題
    • 查看UIView的頭文件,可得,UIView可以設(shè)置主題,那么不是所有繼承UIView的控件就都可以設(shè)置主題了嗎?是的


      Snip20150901_10.png
    • 觀看可得,不僅,只是控件可以設(shè)置主題,UIBarItem等只要遵守了UIAppearance協(xié)議的類,都可以設(shè)置主題


      Snip20150901_11.png
2.遵守UIAppearance協(xié)議的類的,那些屬性可以設(shè)置主題呢?
  • 通過主題對象設(shè)置屬性的前提: 屬性后面是否帶有UI_APPEARANCE_SELECTOR的方法
    • 因為并不是所以屬性可以設(shè)置主題,設(shè)置主題屬性是有前提的
    • 查看頭文件可得,可以設(shè)置UITabBarItem類,發(fā)現(xiàn)setTitleTextAttributes:可以設(shè)置UITabBarItem文字主題
 - (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state
NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
  • 案例:設(shè)置所有的UITabBarItem,普通與選中狀態(tài)下的文字顏色
Snip20150901_8.png

三、運用主題appearance,是否會生效,何時會生效

1、主題會生效:先設(shè)置控件主題,后添加控件,
  • 添加控件時,添加的那一刻會檢查主題,會根據(jù)主題設(shè)置控件 =》主題會生效
2、主題不會生效:先添加控件,后設(shè)置主題
  • 控件已經(jīng)添加,后設(shè)置主題,對以前的添加的控件不起作用了
  • 如果,先添加控件,后設(shè)置主題,主題失效,我們該如何解決呢?
3、如何解決主題失效問題
  • 方案1 :將控件所在控制器的View從窗口移除,因為主題已經(jīng)確定了,再將控件所在控制器的View添加到窗口上 =》 此時主題就起作用了。
Snip20150901_18.png

- 缺點:擴展性不好,因為這樣不能解決所有控制器上的控件的主題

  • 方案2:獲取到應用的windows數(shù)組,然后遍歷,將view刪除,然后添加上即可
    • 注意:控件是否銷毀,要看是否有強指針指向它
      Snip20150901_20.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實...
    香橙柚子閱讀 24,725評論 8 183
  • 婚前準備事宜1.婚禮籌備計劃1.1.決定婚禮日期、地點、儀式及婚宴方式1.2.確定婚禮預算1.3.草擬客人名單1....
    百木子閱讀 694評論 0 3
  • 《這些天你好嗎》 這些天忙于工作 沒有發(fā)信息,你好嗎 這些天每晚有時候會失眠 沒有收到信,你好嗎 聽說心情不是很好...
    金書js閱讀 237評論 4 5
  • 重度關(guān)山未等閑, 忽如一夜到庭前。 芳心本就如芳草, 夢醒時分月正圓。
    細雨煙嵐閱讀 218評論 1 2
  • 今日看到秋愷老師更新的文章《生,不如死》竟然濕潤了眼眶,情不自禁 我甚至都能夠感受到,老師在寫這些字的時候,內(nèi)心的...
    炎炎的幸福部落閱讀 944評論 0 1

友情鏈接更多精彩內(nèi)容