ok wel yes, my 5 yr old does kick off in public, pretty horrifically. that said, there is usually something underlying that has caused it.
things that stood out to me from your post were:
1.) you smacked him for smacking.
2.) forcing apologies is kind of futile. you can't make a child speak, so it turns into a power struggle with each of you getting angrier at each other.
More to the point, maybe he wasn't sorry! maybe the other kid deserved a smack! (ok, so still not on to actually do it, but he might have been provoked)
PLUS, he DID eventually say sorry but that still wasn't good enough for you
3.) you had no control. you allowed him to pick up the pushchair, and instead of stopping him you threatened him with getting other people- which you then didn't follow through with.
I think it's hard when they're tired, you're tired, it's in public and you feel you have to do something to make them behave immediately though. I have to admit to having a fairly short fuse atm so by now means a perfect mum, but what I am trying to do when ds1 kicks off is the following
- give him a chance to talk. instead of going off at him I try and take a deep breath and let him talk. I make a big deal about using words, so that I can understand him (rather than shouting)
- just stop. don't get into a power struggle with trying to make them walk (or anything they're refusing to do). They WILL do it eventually, but sometimes you just need to let them calm down. So I'll sometimes say to ds1 "ok, I see you aren't calm yet. I'll just stand here until you tell me you're calm enough to carry on"
- if he threatens me with fighting/hitting/spitting etc I just say "that is not a nice thing to do, I don't want to listen to you saying unkind things, so I will just stand over here until you are calm", then i move a little way away.
I think one thing to remember is that they are no more in control of the tantrum than you are. Often I think they want to stop but can't. If your ds is anything like mine he just needs to completely blow his top and then he is fine.