2011-07-14 27 views
3

在我的客戶端應用程序,我有一個空閒超時控制機制,當用戶不使用應用程序指定的時間間隔做任何事情,我顯示警告,並拋出他回來到登錄屏幕。這種控制發生在我的容器視圖中,我啓動了所有其他視圖。當空閒時間到,我將這個容器視圖彈出到它的調用者,即登錄屏幕。如何解僱UIActionSheets和UIPopoverControllers不知道誰提出他們

問題是,如果用戶確實顯示一個操作表或一個彈出窗口,然後在空閒時間到了之前什麼都不做,當我把他扔到登錄屏幕時,操作表和彈出窗口仍然保留在登錄屏幕上,因爲我不會解僱他們。

爲了解決這個問題,我能想到讓所有的動作片和popovers保留我的看法控制器的成員,然後在它們的主人的viewWillDisappear方法解僱他們。但我有很多視圖控制器,所以我正在尋找其他方法,如果有的話。

所以,問題是如何才能讓所有的這些行動表和popovers去從我的登錄屏幕上移開不知道誰是他們的來電者是誰?

+1

更重要的是,你需要知道誰是他們,而不是誰叫他們。如果出現這種情況,您需要集中顯示您的機制。 – bshirley

+0

是的,當然。這就是爲什麼我打算把它們變成演示者的成員變量。將它們全部添加到一個全局數組中並實現一個類似於誰的機制也會將它們從數組中移除是一個好主意? – aslisabanci

+0

這似乎是一個可行的解決方案 - 也可能最好一次只有一個屏幕上的popover(如果這現在甚至是一個問題) – bshirley

回答

1

因爲我們已經在這個問題的意見與bshirley交談,我會寫下自己的解決方案。 我已經實現了這樣一個機制來解決這個問題:

在我的登錄視圖控制器中,我創建了一個NSMutableArray,它將保留所有將被解散的動作表和彈出控制器。然後我將這個數組存儲在全局字典中。我通過實用程序方法訪問此字典。然後,通過應用程序,創建操作表或彈出窗口控制器的任何人,都會將組件添加到此數組(從全局數據中檢索數組,然後將其修改並保存回全局數據)。然後,當用戶回到登錄屏幕時,在我的登錄視圖控制器的viewWillDisappear中,我遍歷這個數組並通過檢查從數組獲得的UIView是一個操作表還是一個popover控制器來調用適當的dismiss方法。然後我刪除此數組的所有元素,然後再將其存儲回全局數據。

希望這有助於任何人誰需要實現一個類似的機制。您的意見將不勝感激。

2

我會註冊UIPopover比如聽一些通知。

[[NSNotificationCenter defaultCenter] addObserver:_myPopOver 
             selector:@selector(myDismissPopover) 
              name:@"dismissPopover" 
              object:nil]; 

並添加擴展到UIPopover類。

- (void) myDismissPopover { 
[self dismissPopoverAnimated:YES]; 
} 

當我需要關閉popover時,我只需要發佈通知。

[[NSNotificationCenter defaultCenter] postNotificationName:@"dismissPopover" 
                object:nil]; 
相關問題