By default, if you tap the spacebar twice on the iPhone or iPad, instead of getting \" \" (two spaces), you get \". \" (a period followed by a space). Is the
I have an answer based on the the one given by Chaise above.
Chaise's method does not allow you to type two spaces in sequence - this is not desirable in some situations. Here's a way to completely turn off the auto-period insert:
In the delegate method:
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
//Ensure we're not at the start of the text field and we are inserting text
if range.location > 0 && text.count > 0
{
let whitespace = CharacterSet.whitespaces
let start = text.unicodeScalars.startIndex
let location = textView.text.unicodeScalars.index(textView.text.unicodeScalars.startIndex, offsetBy: range.location - 1)
//Check if a space follows a space
if whitespace.contains(text.unicodeScalars[start]) && whitespace.contains(textView.text.unicodeScalars[location])
{
//Manually replace the space with your own space, programmatically
textView.text = (textView.text as NSString).replacingCharacters(in: range, with: " ")
//Make sure you update the text caret to reflect the programmatic change to the text view
textView.selectedRange = NSMakeRange(range.location + 1, 0)
//Tell UIKit not to insert its space, because you've just inserted your own
return false
}
}
return true
}
Now you can tap the spacebar as much and as fast as you like, inserting only spaces.
In the delegate method:
- (BOOL) textView:(UITextView*)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text
Add the following code:
//Check if a space follows a space
if ( (range.location > 0 && [text length] > 0 &&
[[NSCharacterSet whitespaceCharacterSet] characterIsMember:[text characterAtIndex:0]] &&
[[NSCharacterSet whitespaceCharacterSet] characterIsMember:[[textView text] characterAtIndex:range.location - 1]]) )
{
//Manually replace the space with your own space, programmatically
textView.text = [textView.text stringByReplacingCharactersInRange:range withString:@" "];
//Make sure you update the text caret to reflect the programmatic change to the text view
textView.selectedRange = NSMakeRange(range.location+1, 0);
//Tell Cocoa not to insert its space, because you've just inserted your own
return NO;
}
I don't think there's a way to turn off exactly this, but check out UITextInputTraits. This lets you declare properties of your field, for example you can say if it's for entering a URL. That influences the behavior of the keyboard. If the reason you don't want double space to yield a period and space is that the text should be literally what the user entered for some reason, perhaps you want to turn off autocorrection. It's possible turning off autocorrection turns off double space for period, I don't know.