CS193P-2013 Lecture 5 TextView公黑、生命周期、廣播站機制

UITextView

  • Like UILable, but multi-line

  • 可以滾動、編輯凡蚜、選中等

  • @property (nonatomic, readonly) NSTextStorage *textStorage

    是 NSMutableAttributeString 的一個子類人断,可以通過這個屬性來設(shè)置字符串的屬性

  • 屬性 font :直接 set 會導致原有的字體、顏色等屬性全部丟失朝蜘,需要用 for 循環(huán)取得原來的所有屬性逐個添加回去恶迈,再加上要添加的新屬性

  • Demo

    - (IBAction)changeBodySelectionColorToMatchBackgroundOfBackgroundOfButton: (UIButton *)sender {
          [self.body.textStorage addAttribute:NSForegroundColorAttributeName
                                    value:sender.backgroundColor
                                        range:self.body.selectedRange]
    }
    
    - (IBAction)outlineBodySelection {
          //設(shè)置描邊需要設(shè)置描邊寬度和描邊顏色
          [self.body.textStorage addAttributes: @{NSStrokeWidthAttributeName : @-3,
                                                  NSStrokeColorAttributeName : [UIColor blackColor]}
                                     range:self.body.selectedRange]  
    }
    
    - (IBAction)unoutlineBodySelection {
          [self.body.textStorage removeAttribute: NSStrokeWidthAttributeName
                                       range: self.body.selectedRange]
    }
    

視圖控制器生命周期

  • viewDidLoad
    • 視圖被加載后調(diào)用
    • 在整個視圖生命周期中只會被調(diào)用一次
    • 適合放置初始化代碼
    • 不允許執(zhí)行視圖形狀相關(guān)的代碼,因為此時視圖的邊界還沒有被確定
  • viewWillAppear
    • 視圖將要出現(xiàn)在屏幕上之前被調(diào)用
    • 不要添加一次性初始化內(nèi)容(需要放到 viewDidLoad 里)谱醇,因為 viewWillAppear 會被多次調(diào)用
    • 如果要執(zhí)行的某些初始化基于某些在其他模型里的會改變的數(shù)據(jù)暇仲,就把這些初始化放在這里
    • 可以執(zhí)行一些幾何的初始化
  • viewWillDisappear
    • 可以停止一些動畫
  • viewWillLayoutSubviews/viewDidLayoutSubviews
    • 布局視圖之前/后被調(diào)用。比如旋轉(zhuǎn)屏幕之前/后
    • 添加幾何相關(guān)的代碼(尤其在 did)
  • awakeFromNib
    • 包括控制器在內(nèi)的所有元素副渴,當他們被從 storyboard 中喚醒時奈附,這個方法會被調(diào)用(發(fā)生在 outlet 被設(shè)置之前,即發(fā)生在 MVC 加載之前)
    • 可以放置某些無法放在 viewDidLoad 里的初始化代碼
  • initWithNibName
    • UIViewController 的指定初始化方法

UIButton

  • 沒有像 UITextView 那樣的 textStorage 屬性煮剧,如果要修改 button 中文字的屬性斥滤,必須拷貝一個可變的版本,改變它的屬性再設(shè)置回去

    NSMutableAttribuetedString *title = [[NSMutableAttributedString alloc] initWithString:self.button.currentTitle];
    [title setAttributes: @{NSStrokeWidthAttributeName : @3,
                           NSStrokeColorAttributeName : self.button.tintColor}
                  range: NSMakeRange(0, [title length])];
    //這里要用 NSMakeRange 來創(chuàng)建一個 NSRange(一個C 結(jié)構(gòu)體)表示范圍
    [self.button setAttributedTitle: title forState: UIControlStateNormal];
    

廣播站機制

  • MVC 的廣播站機制勉盅,在 iOS7 中被稱為通知

  • [NSNotificationCenter defaultlCenter] 返回一個類似于 NSUserDefault 的全局共享實例佑颇,使用這個對象來收聽廣播。方法是:

    - (void)addOvserver: (id)observer
              //想要收聽廣播的對象草娜,在 controller 中一般是 self
             selector: (SEL)methodToInvokeIfSomethingHappens
            //observer 中的方法挑胸,當廣播上出現(xiàn)內(nèi)容時會調(diào)用它
                   name: (NSString *)name
            //廣播站的名稱
                 object: (id)sender
            //是否指向收聽某個特定對象的廣播(一般是 nil,表示收聽頻率上的任何廣播)
                   
    - (void)methodToInvokeIfSomethingHappens: (NSNotification *)notification {
      //該方法一定有一個如上的參數(shù)
          notification.name   //上面的 name
        notification.object   //上面的 sender
        notification.userInfo //取決于廣播站
    }
    
    //當停止收聽時驱还,要記得 tune out
    [center removeObserver: self]
    //停止收聽所有廣播
    [center removeObserver: self name:UIContentSizeCategoryDidChangeNoticifation object:nil] 
    //停止收聽某個特定 sender 發(fā)送的廣播
    
    • 一定要 tune out 的理由:

      通知中心始終用一個指針指向觀察者嗜暴,稱為 Unsafe Retained 不安全保留類型凸克。意思是议蟆,如果你還未調(diào)用 removeObserver 方法就離開了堆,通知中心可能會給你發(fā)送消息萎战,導致應用崩潰咐容。

    • tune out 的時機:

      • MVC 要離開當前視圖時(比如 viewWillDisappear)

      • dealloc 方法(所有的對象都有這樣一個方法,當對象要被銷毀的最終階段會被調(diào)用)蚂维,如果處于某些原因無法在 MVC 要離開視圖時調(diào)用 removeObserver 方法戳粒,那就在這里調(diào)用

        - (void) {
          [[NSNotificationCenter defaultCenter] removeObserver:self]  
        }
        
    • Demo

      //寫在 viewWillAppear 里
      [self usePreferredFonts];
      //如果 MVC 不是當前視圖,又改變了字體大小虫啥,要在這里同步一下
      NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
      [center addObserver : self
                  selector: @selector(preferredFontSizeChanged:)
                     name : UIContentSizeCategoryDidChangeNotification
                  object : nil];
      
      - (void)preferredFontSizeChanged: (NSNotification *)notification {
          [self usePreferredFonts];
      }
      
      - (void)usePreferredFonts {
          self.body.font = [UIFont preferredFontForTextStyle: UIFontTextStyleBody];
          self.headline.font = [UIFont preferredTextStyleHeadline]
      }
      
      //記得在 viewWillDisappear 里 removeObserver
      
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔚约,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涂籽,更是在濱河造成了極大的恐慌苹祟,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異树枫,居然都是意外死亡直焙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門砂轻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奔誓,“玉大人,你說我怎么就攤上這事搔涝〕梗” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵庄呈,是天一觀的道長杯聚。 經(jīng)常有香客問我,道長抒痒,這世上最難降的妖魔是什么幌绍? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮故响,結(jié)果婚禮上傀广,老公的妹妹穿的比我還像新娘。我一直安慰自己彩届,他們只是感情好伪冰,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著樟蠕,像睡著了一般贮聂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寨辩,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天吓懈,我揣著相機與錄音,去河邊找鬼靡狞。 笑死耻警,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的甸怕。 我是一名探鬼主播甘穿,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼梢杭!你這毒婦竟也來了温兼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤武契,失蹤者是張志新(化名)和其女友劉穎募判,沒想到半個月后缸榛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡兰伤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年内颗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敦腔。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡均澳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出符衔,到底是詐尸還是另有隱情找前,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布判族,位于F島的核電站躺盛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏形帮。R本人自食惡果不足惜槽惫,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辩撑。 院中可真熱鬧界斜,春花似錦、人聲如沸合冀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽君躺。三九已至峭判,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棕叫,已是汗流浹背林螃。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谍珊,地道東北人治宣。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓急侥,卻偏偏與公主長得像砌滞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子坏怪,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容