iPhone: Disable the “double-tap spacebar for .” shortcut?

前端 未结 8 1718
陌清茗
陌清茗 2020-11-28 15:29

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

相关标签:
8条回答
  • 2020-11-28 15:55

    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:

    Swift

    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.

    Objective-C

    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;
    }
    
    0 讨论(0)
  • 2020-11-28 15:59

    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.

    0 讨论(0)
提交回复
热议问题