Isaiah Cousins added 17 points for the Sooners (13-3, 2-1 Big 12), who ended No. 9 Iowa State's school-best winning streak at 14 games.
The Sooners won despite a rough day for Cameron Clark. The Big 12's leading scorer finished with 12 points on 4-for-16 shooting. The Sooners were fine because they matched a season high with 13 3-pointers and outrebounded the Cyclones 41-34.
Oklahoma had lost two of three and was coming off a 90-83 loss to Kansas on Wednesday.
DeAndre Kane had 23 points and nine rebounds and Melvin Ejim added 21 points and six rebounds for Iowa State (14-1, 2-1). Georges Niang scored 14 points and Dustin Hogue added 13 for the Cyclones.
Ejim's 3-pointer with 2:39 remaining gave Iowa State its first lead since early in the second half. Spangler came right back with an old-fashioned three-point play to give the Sooners a 79-77 lead. After Oklahoma got a stop, Hield scored on a layup to bump the lead to four.
Ejim missed a putback dunk on the other end and OU rebounded. Cousins made two free throws with 57.9 seconds to play, pushing the Sooners' lead to six.
Hield missed a pair of free throws to leave an opening for the Cyclones, but they couldn't take advantage.
The teams were tied at 39 at halftime, but Oklahoma was hot out of the break.
After forcing an Iowa State turnover, Hield raised his arms to get the crowd going, Shortly after that, Cousins hit a three to push the lead to 13 and force an Iowa State timeout.
The Cyclones started to creep back into the game. Kane made a pair of free throws to cut Oklahoma's lead to 64-58 with 8:59 to play. Iowa State cut the lead to three, but Niang committed his fourth foul with 7:42 remaining.
Oklahoma regained control with the kind of intensity it demonstrated throughout the game. Spangler hustled for an offensive rebound, leading to a 3-pointer by Jordan Woodard that bumped the Sooners' lead back to 71-63.
A baseline dunk by Iowa State's Hogue trimmed Oklahoma's lead to 76-74 and set up the final three minutes.