UISwitch 的隱患

先來看一張 Bug 截圖:


1.gif

我想你大概知道發(fā)生了什么。右側(cè)的 UISwitch 按鈕綁定了一個ValueDidChanged事件用于開啟和關(guān)閉【隱私保護功能】。當(dāng)你點擊按鈕或者快速滑動按鈕時,這個事件只會觸發(fā)一次。然而坑點在于,如果是慢慢滑動滑塊,當(dāng)達到一個臨界點,綁定的事件會在一瞬間觸發(fā) N 次。手指還沒來得及離開屏幕繼續(xù)滑動而發(fā)生細微偏移,綁定的事件會在這個時間片中被觸發(fā) N 次

2.gif

所以,你必須想辦法保證該事件只會被觸發(fā)一次。我暫時想到兩種方式去解決這個問題:

  1. 事件第一次被觸發(fā)后,這時手指還在屏幕上,暫時禁用 UISwitch 的觸摸事件,使其觸摸失效。
  2. 設(shè)置一個 Flag, 避免多次調(diào)用。

顯然,第一種方法我還無處下手,如果你知道該怎么做,share it to us??。第二種方法可能會讓你的代碼中又多出一個臨時的全局變量或者靜態(tài)局部變量,但是請不要輕易使用它們,全局變量會增加代碼耦合度,而靜態(tài)局部變量會導(dǎo)致不可預(yù)估的后果。我有一個更好的辦法去設(shè)置 Flag 標志:

- (IBAction)test:(UISwitch *)sender
{
    if ([objc_getAssociatedObject(sender, "onReally") isEqualToValue:@(sender.isOn)]) return;
    objc_setAssociatedObject(sender, "onReally", @(sender.isOn), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    
    NSLog(@"%s -> %@", __func__, sender.isOn ? @"ON" : @"OFF");
}
最后編輯于
?著作權(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)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,039評論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,315評論 4 61
  • 我聽從你的建議 不再愛你 于是開始為難自己
    孤鳥差魚閱讀 151評論 0 1
  • 喜歡嬌花的女孩啊! 在這夢中, 你還在等待嗎? 等待來年的嬌花。 不如, 看看遠方寒風(fēng)中, 一種叫做梅花的, 美麗...
    圓凣閱讀 222評論 0 1
  • 胖子打電話過來,問下午什么時候上瑜伽課,我告知了她,并囑咐她早點過來,燉了排骨湯給她吃。 燉湯不假...
    天青81閱讀 351評論 0 0

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