2017-07-05 32 views
9

iOS 11 dodaje inteligentne cytaty podczas pisania. W MacOS możemy wyłączyć cudzysłowy drukarskie na NSTextView poprzez ustawienie:iOS 11 - wyłącz inteligentne cytaty

textView.automaticQuoteSubstitutionEnabled = NO; 

Ani UITextField lub UITextView wydają się mieć tej właściwości lub własności enabledTextCheckingTypes. Jak wyłączyć inteligentne cytaty na iOS 11?

Odpowiedz

16

Inteligentne cytaty i inne funkcje, takie jak inteligentne myślniki, są kontrolowane przez UITextInputTraits Protocol, które są przyjmowane zarówno przez UITextField, jak i UITextView.

W szczególności właściwość smartQuotesType można ustawić na jedną z .default, .yes lub .no. W tej chwili nie ma dalszej dokumentacji tych wartości, ale .yes i .no nie wymagają objaśnień. Domyślam się, że w systemie .default system użyje właściwości, takich jak textContentType i isSecureTextEntry, aby określić odpowiednie zachowanie.

Na przykład tekstowy typ wiadomości e-mail, hasła lub adresu URL prawdopodobnie domyślnie wyłączy inteligentne cytaty, podczas gdy tytuł zadania może domyślnie być włączony. Wyobrażam sobie, że bezpieczne pola wprowadzania tekstu również domyślnie mają wyłączone inteligentne.

Ustawienie odpowiedniego typu treści tekstowej dla widoków wejściowych może znacznie poprawić komfort użytkowania i jest wysoce zalecane.

+0

Niezły dodatek. Tylko wyjaśnienie: 'smartQuotesType' jest dostępne tylko w systemie iOS11. [Apple docs] (https://developer.apple.com/documentation/uikit/uitextinputtraits/2865931-smartquotestype) –

+1

No tak, ale "iOS 11" to dosłownie pierwsze dwa słowa w tytule pytania i pytanie, więc uważam, że było całkiem jasne. – Paulw11

+0

To prawda, ale możesz napotkać ten problem, uruchamiając aplikacje iOS10 na urządzeniach z iOS11. Możesz natknąć się na ** inteligentne znaki interpunkcyjne ** w iOS11, których nie można się pozbyć, chyba że Twój projekt jest kompilowany w iOS11. –

2

Miałem z tym problem - często korzystam z Monitów i NX za pośrednictwem mojego iPada Pro. Wyłączenie "inteligentnej interpunkcji" w ustawionych ustawieniach.

0

Nie sądzę, że smartQuotesType i smartQuotesType to dobre praktyki w niektórych językach.

ustawić te właściwości dla każdego wejścia tekstowych w naszej aplikacji:

if (@available(iOS 11.0, *)) { 
    textView.smartDashesType = UITextSmartDashesTypeNo; 
    textView.smartQuotesType = UITextSmartQuotesTypeNo; 
    textView.smartInsertDeleteType = UITextSmartInsertDeleteTypeNo; 
} else { 
    // Fallback on earlier versions 
} 

Tworzenie kategorię, aby wyłączyć te funkcje „smart” sprawia, że ​​nie ma sensu (Bug):

- (UITextSmartDashesType)smartDashesType { 
    return UITextSmartDashesTypeNo; 
} 
- (UITextSmartQuotesType)smartQuotesType { 
    return UITextSmartQuotesTypeNo; 
} 
- (UITextSmartInsertDeleteType)smartInsertDeleteType { 
    return UITextSmartInsertDeleteTypeNo; 
} 

Więc próbowałem wyłącz te funkcje na stałe za pomocą metody swizzling:

#import <objc/runtime.h> 

@implementation DisableFuckingSmartPunctuation 

+ (void)load { 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     Class class = [objc_getClass("UITextInputController") class]; 
     Class myClass = [self class]; 

     SEL originalSelector = @selector(checkSmartPunctuationForWordInRange:); 
     SEL swizzledSelector = @selector(checkSmartPunctuationForWordInRange:); 

     Method originalMethod = class_getInstanceMethod(class, originalSelector); 
     Method swizzledMethod = class_getInstanceMethod(myClass, swizzledSelector); 

     BOOL didAddMethod = 
     class_addMethod(class, 
         originalSelector, 
         method_getImplementation(swizzledMethod), 
         method_getTypeEncoding(swizzledMethod)); 

     if (didAddMethod) { 
      class_replaceMethod(class, 
           swizzledSelector, 
           method_getImplementation(originalMethod), 
           method_getTypeEncoding(originalMethod)); 
     } else { 
      method_exchangeImplementations(originalMethod, swizzledMethod); 
     } 
    }); 
} 

- (void)checkSmartPunctuationForWordInRange:(id)arg1 { 

} 

@end 

Hakowanie prywatnych metod zawsze w orki lubią urok ...