A second-half strike from Bernard Parker was all South Africa needed in Johannesburg, upsetting a strong side put out by Vicente Del Bosque.
Igesund said his tactics were spot on, but praised his players for executing his instructions to keep a clean sheet.
"Our game plan was fantastic. The players were fantastic. We executed tactically what we wanted to do," Igesund said.
"We allowed them to have balls in certain areas. We knew exactly what they were going to do. The guys executed it (the game plan) so well.
"Those are the things which make a coach very happy."
South Africa failed to qualify for Brazil 2014 and many expected Spain to run riot against Igesund's men at the FNB Stadium.
Igesund urged his players not to get carried away, but said the win was a sign they were heading in the right direction.
"I know a lot of people wrote us off, saying we're going to get seven or eight scored against us tonight, but this team is on the up," he said.
"There is no doubt about that. How often and when last can we say that we beat the world champions?"
Igesund was involved in an altercation with Spain officials late on after goalkeeper Victor Valdes suffered an injury but Del Bosque had used his maximum of six substitutes.
Spain were allowed to bring on Pepe Reina as their seventh change and Igesund said that should never have been the case.
"The referee or the fourth official came and asked me if they can they put another player on. I said 'Look, I'm not the referee and we need to follow the rules'," he said.
"It was an official game and they needed to speak to the referee. We were told in the meeting before the game started that the maximum was six changes. This is an international friendly match – I don't think the rules needed to be changed.
"I never said they must not put the players on. The referee must do so because they gave us the rules."
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.