2014-01-10 53 views
10

在我的Storyboard我定義了modal segue。相應的模態的視圖被通過一個按鈕和一個簡單的駁回:iOS:觸發事件不會發送到下一個控制器而模式被解僱

- (IBAction)dismiss:(id)sender { 
    [self dismissViewControllerAnimated:YES completion:^{ 
     return; 
    }]; 
} 

一切正常但事情是,當這種過渡發生時,如果用戶在「下一個」控制器的視圖抽頭(即,一種這將取代模態),觸摸事件不會被該控制器捕獲,直到完全轉換完成。

我控制器鏈是:

UINavigationController -> visibleViewController -> modal Controller 

(但要注意的是,modal Controller實際上是由navigationController呈現 - 這就是它是如何設置默認的故事板)。

如何確保在轉換開始後觸摸事件發送到下一個控制器?

+0

請問你能出示你的故事板嗎? – Mikael

+0

@Mikael我不知道爲什麼這個問題上週出現了:我一年多前問過這個問題......我不再有這個代碼,不幸的是,我不記得我是如何最終解決或減輕問題。 – PJC

回答

4

你描述的是正常的iOS行爲,而不是模型ViewController具體。在接收到目的地ViewController上的觸摸事件之前,使用推入和彈出來輸入或退出ViewController也將等待轉換結束。

避免這種情況的一個好的解決方案是將您的ViewController放在第一個ViewController內的容器中。 顯示和解散ViewController是您的責任,並且需要更多代碼(例如使用容器的Alpha通道播放),但是會讓您更好地控制視圖接收觸摸事件的人員和時間。

例如:

- (IBAction)hideContainer:(id)sender { 

    [UIView animateWithDuration:0.4 
          delay:0.0   
         options:UIViewAnimationOptionAllowUserInteraction 
        animations:^ 
          { 
           self.container.alpha = 0; 
          } 
        completion:^(BOOL finished){}]; 
} 
0

當您現在或解僱一些視圖控制器模態,模態的視圖控制器的觀點得到系統加入到過渡視圖過渡期間。

在解僱期間,視圖控制器在你的模態之下,被一個透明的過渡視圖覆蓋,它攔截觸摸,所以基本上沒有簡單的方法來通過它。

該選項可能是您爲模態表示覆蓋transitioningDelegate,並在模態控制器視圖下的截面視圖中添加一些截取視圖。截取視圖將在轉換期間獲得所有觸摸,然後您將它們轉發到基礎呈現視圖控制器的視圖。

例如解僱轉換過程中你會有這樣的事情:

Modal VC View 
---------------- 
Intercepting View 
-------------------------- 
Transitioning View 
------------------------------------------- 
Presenting View Controller's view 
------------------------------------------------------------------ 
Window 
------------------------------------------------------------------------------ 

然後你理論上將能夠觸及你轉發給呈現視圖控制器的看法。