Dan
June 28, 2021, 8:52pm
1
Hello there, if somebody would ask me what I hate the most, is Timer. I’ve done some hard things, from my perspective, but using Timer and all its functions is driving me up the wall.
Does anyone have an idea about how can I disable a button for a specific time? Thanks in advance…
Timers are a bit of a hassle if you aren’t familiar with them.
Are you using UIKIt or SwiftUI?
Im kinda new and don’t completely know what you are trying to do but I made this code work. Maybe you can play with it to get it to work for what you need.
import SwiftUI
struct ContentView: View {
@State private var buttonDisabled = true
var body: some View {
Button(action: {
}, label: {
Text(buttonDisabled ? "Disabled" : "Click Me")
.frame(width: 200, height: 100)
.padding()
.foregroundColor(.white)
.background(Color.blue)
})
.disabled(buttonDisabled == true)
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
buttonDisabled = false
}
}
}
}
Essentially what happens is the button is disabled while buttonDisabled is true. When the view is loaded 5 seconds later buttonDisabled is false.
1 Like
Good suggestion Scott.
Another version… every time the button is re-enabled when the time elapses, you can tap it again.
struct ContentView: View {
@State private var buttonDisabled = false
var body: some View {
Button(action: {
buttonDisabled = true
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
buttonDisabled = false
}
}, label: {
Text(buttonDisabled ? "Disabled" : "Click Me")
.frame(width: 200, height: 100)
.padding()
.foregroundColor(.white)
.background(Color.blue)
})
.disabled(buttonDisabled)
}
}
2 Likes
Oh nice! I didn’t even think about putting DispatchQueue in the action code. Im going to save that in my snippets for future use lol.
2 Likes
Dan
June 29, 2021, 10:11am
6
SwiftUiI for the current view I want to do that
Is the delay intended to always be a fixed value?
Dan
June 29, 2021, 10:34am
8
Thank you, it was really helpful !
Dan
June 29, 2021, 10:34am
9
Thank you, it was really helpful:)
1 Like