2012-03-22 23 views
0

我在UIView中爲iPhone創建了一個迷你彈出式菜單,並且我希望用戶能夠關閉該視圖,如果他們除了選擇其中一個選項以外執行任何操作。所以,如果用戶點擊/滑動/捏住屏幕上的任何其他元素,彈出視圖應該消失。如何通過用戶點擊或在其他位置滑動來移除UIView?

但是,我不想檢測阻止別的事情發生的手勢......例如,下面有一個UITableView,如果我向上或向下滑動,我希望它按預期方式移動以及解散迷你彈出視圖。

我應該使用多個手勢識別器,還是應該使用touchesBegan,還是有更好的方法?

+0

看到這篇文章http://stackoverflow.com/questions/6078001/how-do-you-detect-touches-in-specific-uiview-when-sliding-finger-across-mutiple – rakeshNS 2012-03-22 17:28:45

回答

2

UIViewController

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    if (touch.view!=yourView && yourView) { 
     [yourView removeFromSuperview]; 
     yourView=nil; 
    } 

} 

編輯將這個:以檢測觸摸且僅當視圖是否存在刪除變化

EDIT2:你可以添加以下到您的UIButtons/UITableView方法

if (yourView) { 
    [yourView removeFromSuperview]; 
    yourView=nil; 
    } 

或將touchesBegan:withEvent:作爲touchDown事件添加到您的按鈕。

這兩個惱人的事做,但看不到另一種方式做到這一點,因爲touchesBegan方法不會被交互式元素調用。

EDIT3:對廢鋼的是,想我已經把它釘

在你的界面添加UIGestureRecognizerDelegate

@interface ViewController : UIViewController <UIGestureRecognizerDelegate> { 

然後在viewDidLoad添加此

UITapGestureRecognizer *tapped = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapMethod)]; 
tapped.delegate=self; 
tapped.numberOfTapsRequired = 1; 
[self.view addGestureRecognizer:tapped]; 

然後在您的viewController添加這兩種方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
if (touch.view!=yourView && yourView) { 
    return YES; 
} 
return NO; 
} 

-(void)tapMethod { 
[yourView removeFromSuperview]; 
yourView=nil; 
} 
+0

所以我必須附上touchesBegan方法到視圖控制器?如果是這樣,我想我需要以某種方式檢查觸摸下的元素? – jowie 2012-03-22 16:39:24

+0

這就是他已經用'if(touch.view!= yourView)'做的事情,然後你可以安全的移除你的支撐。 觸摸包含觸摸的位置。他然後問是否它是在視圖內,如果不是,你可以刪除它=) – 2012-03-22 17:08:25

+0

謝謝 - 但不幸的是,這似乎只有在視圖控制器的區域沒有用戶交互......在我有'UIButton '和'UITableView','touchesBegan:'消息似乎沒有通過。 – jowie 2012-03-22 22:42:39

相關問題