其實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。