The visitors had the best chances and should have clinched all three points during a competitive encounter before the game erupted in the dying minutes when Preston had a goal chalked off for offside.
Striker Richard Cresswell then crashed into a barrier and suffered a suspected neck injury after jostling with Gus Uhlenbeek for the ball inside the box.
Moments later, fellow striker Ricardo Fuller was sent off for violent conduct.
Preston created the first goalscoring opportunity after five minutes. Fuller intercepted a header by Andy Myers and tried to hook the ball over Steve Banks' head from a tight angle inside the box.
But the on-loan keeper from Bolton did well to close him down and beat the ball away for a corner.
However it was City who grabbed the lead with a well-taken goal 15 minutes later.
Lewis Emanuel spun past Scottish international Graham Alexander and ran down the left towards the by-line.
He then swept a low ball across the box to find Michael Proctor who side-footed home from six yards.
Preston should have levelled just before the half-hour mark but Cresswell blazed his shot from only eight yards over the bar.
The visitors then came even closer to snatching an equaliser when Chris Lucketti's header from a Paul McKenna corner was cleared off the line by Stephen Warnock.
Preston continued to plug away though and were rewarded with a spot kick in the 39th minute when Fuller was blocked by Uhlenbeek as he tried to weave his way through the box.
Alexander stepped up from the spot to strike the penalty, right-footed down the middle.
Andy Gray squandered a great chance to put City back on top with less than two minutes remaining in the first half.
But he could not get much power behind his 12-yard shot and keeper Tepi Moilanen made a comfortable save.
Preston started the second half brightly and were unlucky not to add to their tally after City failed to clear a low in-swinging corner from McKenna.
The ball broke to Dickson Etuhu but his shot was blocked. Cresswell then saw his effort from point-blank range brilliantly stopped by Banks.
After 61 minutes Alexander whipped over a fine cross from the right and McKenna rose to head the ball like a bullet but Banks once again came to City's rescue with an acrobatic save.
At the other end substitute Iain Anderson saw his goalbound shot blocked by a defender before Uhlenbeek should have scored from close range but he failed to connect.
Preston then had the ball in the net in the last minute when Lucketti scored with a header at the back post but the goal was ruled out for offside.
The game then boiled over in injury time when Cresswell collided with a barrier behind the goalline and Fuller was then sent off for violent conduct moments later.