如何讓view只響應一個按鈕

一些應用經常會在一個view上放多個按鈕,比如登錄頁面,就會有註冊與登錄按鈕。理論上講註冊和登錄按鈕是不能同時按下的,但是如果你同時按下這兩個按鈕,這兩個東東都會顯示響應高亮狀態,其結果就不可預知了。這種情況經常會被測試童鞋當成bug如何讓view只響應一個按鈕 - 楊叫獸 - 青青子衿 悠悠我心

其實UIView類屬性有個exclusiveTouch屬性,表示是否該view響應觸摸是排他的。默認的設置是NO,即不排他。如果想讓按鈕排他響應,只需將按鈕的exclusiveTouch設置爲YES即可。

實際編程中我一般會在viewDidLoad方法中對self.view中的subview進行遍歷,如果是按鈕對象就將它的exclusiveTouch屬性設爲YES。

示例代碼:

  for (UIView *subview in self.view.subviews) {         if ([subview isKindOfClass:[UIButton class]]) {             subview.exclusiveTouch = YES;         }     }


比如:

UINavigationBar左右兩邊按鈕可同時點擊的問題

這個問題是我們這邊測試發現的。UINavigationBar左右兩邊的按鈕竟然可以同時點擊,他們可以連續響應。如果它們的操作是互斥的,如“發送”和“取消”,很可能因爲沒有做同時操作的處理,引起App異常。一個比較方便的解決辦法就是設置button的exclusiveTouch屬性設置爲YES,這樣只要此按鈕排他性地接受的Touch事件。如果你的左右兩邊不是按鈕,而是UIBarButtonItem,只能在代碼邏輯上做一些容錯處理了。


另外說明:手勢識別會忽略exclusiveTouch設置。詳見蘋果官方例子:SimpleGestureRecognizers
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章