我正在使用UIWebView
,並且不希望導航欄出現,除非用戶在屏幕上的任何地方點擊不是鏈接。 所以我有這樣的代碼顯示的延遲後的導航欄:cancelPreviousPerformRequestsWithTarget未取消未完成的performSelector:withDelay
- (void)handleTapGesture:(UITapGestureRecognizer *)sender
{
....
[self performSelector:@selector(showNavigationBar) withObject:self afterDelay:0.2];
}
我沒有打電話showNavigationBar
立即當輕敲處理程序被調用,因爲用戶可能有一個鏈接上點擊在這種情況下,自來水處理程序被稱爲之前UIWebView
shouldStartLoadWithRequest
,所以如果我隱藏導航欄shouldStartLoadWithRequest
它會瞬間閃爍到屏幕上。 因此,我將其設置爲在延遲後顯示,以便在shouldStartLoadWithRequest
內執行以下代碼(並且如果用戶未點擊鏈接shouldStartLoadWithRequest
未被調用並顯示導航欄,因爲它應該是在這種情況下)。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showNavigationBar) object:nil];
...
但是這是行不通的,我已經增加了延遲時間幾秒鐘,可以確認cancelPreviousPerformRequestWithTarget
已經顯示在導航欄之前獲取調用,但在指定的時間經過的欄顯示。 cancelPreviousPerformRequestWithTarget
不起作用。
有人知道爲什麼它不工作?
我給一個嘗試。是否有取消變體適用於所有運行循環?我試過這個,但它也不起作用:[[NSRunLoop mainRunLoop] cancelPerformSelector:@selector(showNavigationBar)target:self argument:nil]; – Gruntcakes 2012-01-02 05:46:53
@Piepants我不這麼認爲,但那並不意味着沒有。 – 2012-01-02 05:51:33
有同樣的問題和標記是要走的路! – durazno 2016-05-20 13:19:09