UIButtonTypeSystem遇到的坑

UIButtonType

UIButton提供了buttonWithType的類方法來初始化,UIButtonType是一個枚舉:

typedef NS_ENUM(NSInteger, UIButtonType) {
    UIButtonTypeCustom = 0,                         // no button type
    UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0),  // standard system button

    UIButtonTypeDetailDisclosure,
    UIButtonTypeInfoLight,
    UIButtonTypeInfoDark,
    UIButtonTypeContactAdd,

    UIButtonTypePlain API_AVAILABLE(tvos(11.0)) API_UNAVAILABLE(ios, watchos), // standard system button without the blurred background view

    UIButtonTypeRoundedRect = UIButtonTypeSystem   // Deprecated, use UIButtonTypeSystem instead
};

平時用的比較多的是UIButtonTypeCustom和UIButtonTypeSystem,其中UIButtonTypeCustom和[[UIButton alloc] init]都是自定義的button,目前使用起來感覺是一樣的(此處不嚴謹,后續(xù)有新的發(fā)現(xiàn)再完善)。UIButtonTypeSystem是創(chuàng)建系統(tǒng)的button,系統(tǒng)button內(nèi)做了一些處理,比如highlight時透明度為0.3,設(shè)置title的時候有動畫效果。一般情況下,使用系統(tǒng)button可以很省事。

遇到的問題

系統(tǒng)button在設(shè)置title的時候是有一個動畫效果的,在真機iPhone7p上測試動畫效果大約是170ms,也就是說,當(dāng)調(diào)用了setTitle設(shè)置后,需要170ms后才會真的設(shè)置,表現(xiàn)地效果就是文字淡入淡出的效果,這樣似乎也沒什么問題。當(dāng)時當(dāng)button本身有一個textA,然后再去修改為textB就會看到textA -> textB的切換。假設(shè)有一個tableView,復(fù)用的cell上有button,button的文字不是一樣的。那么在reload的時候,就會出現(xiàn)cell的文字出現(xiàn)textA -> textB的切換,這個效果還是很糟糕的。

解決方法

  1. 可以使用UIButtonTypeCustom的button,自定義button在設(shè)置title的時候,是立即生效的,無動畫過程。缺點是,你需要自己去實現(xiàn)按鈕按下效果。按下效果推薦重寫setHighLight的方法去實現(xiàn),如果使用touch事件實現(xiàn)的話,在tableView的BounceVertical過程中,會只響應(yīng)touchDown事件,而不響應(yīng)touchUp事件(這個現(xiàn)象的原因有待研究,猜測和runloop機制有關(guān))

  2. 取消系統(tǒng)button的設(shè)置動畫,參考How to stop unwanted UIButton animation on title change?

    [UIView performWithoutAnimation:^{
        [myButton setTitle:text forState:UIControlStateNormal];
        [myButton layoutIfNeeded];
    }];
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 一、簡介 <<UIButton(按鈕) : 既能顯示文字,又能顯示圖片,還能隨時調(diào)整內(nèi)部圖片和文字的位置,實現(xiàn)了監(jiān)...
    無邪8閱讀 5,788評論 0 2
  • 一、前言 關(guān)于蘋果的布局一直是我比較糾結(jié)的問題,是寫代碼來控制布局,還是使用storyboard來控制布局呢?以前...
    iplaycodex閱讀 2,759評論 0 1
  • 美團iOS面試敗北感悟 | 掘金技術(shù)征文 http://www.cocoachina.com/special/20...
    小劉_假裝是個程序員閱讀 434評論 2 0
  • 1、找朋友幫你拍,或用前置攝像頭自拍; 2、打開VUE,點擊右下方,設(shè)為1段10s; 3、拍完視頻,點紅鍵保存后,...
    董文嬌閱讀 1,295評論 0 1
  • 有時,我們自感不足時,常常向外求取,包括對父母,也包括對別人。求給予、關(guān)注、愛、認可……在求取不到時...
    寒地櫻桃葛煜閱讀 264評論 0 1

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