2017-02-19 68 views
0

我需要在點擊幾小時後禁用按鈕(15)。我無法迅速找到答案。此外,如果我關閉應用程序計時器將保持。當用戶改變iPhone的時間時,定時器仍然是相同的,這也是非常重要的。那麼我應該使用當地時間嗎?我對這個thx有新的建議。快速關閉按鈕一段時間

+0

查看http://stackoverflow.com/questions/32528478/xcode-swift-how-to-disable-a-button-and-re-啓用-24小時後 – rmaddy

回答

1

ystack的答案是正確的想法,但我認爲你需要一個計時器。

正如@ystack所說,當用戶點擊一個按鈕時,計算應該重新啓動計時器的時間並保存到UserDefaults。這將是目前的時間加上幾個小時。 (我們稱之爲buttonReenableTime。)

然後禁用您的按鈕並啓動一個持續時間設置爲buttonReenableTime - now的計時器。 (直到重新啓用時間的秒數)。使計時器變量變弱,並使用scheduledTimer方法之一來創建它,並同時啓動它。

使計時器方法重新啓用按鈕。

每當您收到applicationDidBecomeActive消息時,使舊定時器無效,從UserDefaults讀取保存的值,然後重新計算buttonReenableTime - now。如果它還在將來,請啓動一個新的計時器。如果它現在是在過去,重新啓用按鈕立即(這意味着,當你的應用程序被暫停或不運行在所有的時間過去了。)

Date有一個方法timeIntervalSinceReferenceDate,可以讓你把一個日期變成雙。這是用於在日期值上進行數學計算。)

+0

所以我將不得不做一個計時器,點擊按鈕時啓動它,將它保存在某個地方,然後比較定時器的值是高於15小時並停止。 –

+0

您無法保存定時器。你要節省的是你的計時器應該開火的時間。然後,當你的應用程序再次激活時,你會檢查日期,看看時間是否已經過去。如果是這樣,您將立即重新啓用該按鈕。如果沒有,您將創建一個計時器設置爲在目標時間觸發。 –

1
  1. 商店時被點擊的按鈕UserDefaults
  2. 禁用按鈕的交互通過設置button.enabled = false
  3. 重新啓用當按鈕後幾個小時,查看當前的時間差時間與UserDefaults中保存的時間相對應。如果超過幾小時,請重新啓用按鈕。
+0

但是如果我更改設備的時間會怎麼樣。 –

+0

@HonzaValta您可以探索爲當前標準服務器時間執行網絡提取,以消除對用戶設備時間的依賴。檢出:http:// stackoverflow。com/questions/9075303 /從蘋果服務器獲取日期和時間 – ystack

0

您應該使用簡單的端點從服務器返回時間戳。

NSDate()可能很容易被欺騙,這是大多數公司使用的典型工作。

接下來,您應該在本地存儲時間戳。對於簡單的實現,用戶默認值是最好的選擇,但是您可以使用領域或核心數據將其存儲爲獨立對象,具體取決於您的用例。只需檢查從服務器獲得的時間是否大於本地存儲的時間。

至於取消按鈕,如果它是一個uibutton,你可以使用button.enabled = false。或者如果你不使用uibutton,你可以使用button.userInteractionEnabled = false