textField:shouldChangeCharactersInRange:replacementString:
in the delegate, check the replacement string for special characters and prevent the replacement if you find any.
The easiest way to check for the absence of alphanumeric characters:
if ([replacementString rangeOfCharacterFromSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet]].location != NSNotFound) {
source share