2014-07-13 81 views
0

在iOS應用程序中,我按下一個按鈕,然後出現一個彈出式菜單。 如果我在菜單外部的任何位置觸摸任何位置(UITableView,其他UIButton),我想要關閉彈出式菜單。 如何在屏幕上的UI元素(如UITableView,UIButton)處理事件之前攔截觸摸事件,以便我可以以編程方式關閉菜單?iOS:如何在UI元素處理事件之前截獲觸摸事件

我試過-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)eventUIViewController,但它不起作用。我觸摸的用戶界面元素將處理該事件,因此我無法攔截該事件。

回答

3

在菜單下添加一個覆蓋整個屏幕的透明UIView。然後只處理這個視圖的水龍頭。

0

設置userInterActionEnabled當菜單可見時,所有視圖的屬性爲NO。一旦丟棄,再次將其設置爲YES。

- (void) enableOrDisableControlsExceptMenu : (UIView *) parentView :(bool) bEnabled 
{ 
    for (UIView * view in parentView.subviews) 
    { 
     if (![view isKindOfClass:[YourMenu class]) //YourMenu is the menu view class 
      view.userInterActionEnabled = bEnabled; 
     [self enableOrDisableControlsExceptMenu : view :bEnabled]; 
    } 
} 

當菜單可見,調用像上面的方法:

[self enableOrDisableControlsExceptMenu:self.view :NO]; 

當菜單被丟棄(看不見的),把它想:

[self enableOrDisableControlsExceptMenu:self.view :YES]; 
0

可以添加UIGestureRecognizer到主窗口並攔截觸摸。如果你想要的只是一個水龍頭,然後UITapGestureRecognizer應該做的工作。

如果您正在尋找任何形式的觸摸,那麼我會建議使用自定義的GestureRecognizer實現touchesBegan