2015-07-15 14 views
7

Ho bisogno di utilizzare due caratteri diversi nella visualizzazione testo, quindi imposto il testo attribuito in textViewDidChange. Ma per la tastiera giapponese il carattere di input viene inserito ripetutamente.UITextView attributeText con tastiera giapponese ripete l'input

Funziona per la tastiera inglese. Funziona anche con la tastiera giapponese quando si utilizza il testo normale invece di attributeText.

Il mio codice:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UITextView *textView = [[UITextView alloc] initWithFrame:self.view.frame]; 
    textView.delegate = self; 
    [self.view addSubview:textView]; 
} 

- (void)textViewDidChange:(UITextView *)textView 
{ 
    NSLog(@"TOTAL: %@", textView.text); 

    textView.attributedText = [[NSMutableAttributedString alloc] initWithString: textView.text]; 
} 

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    NSLog(@"ADDED: %@", text); 

    return YES; 
} 

uscita:

2015-07-15 13:51:10.156 japKeyTest[32163:5765000] ADDED: a 
2015-07-15 13:51:10.167 japKeyTest[32163:5765000] TOTAL: あ 
2015-07-15 13:51:11.376 japKeyTest[32163:5765000] ADDED: a 
2015-07-15 13:51:11.378 japKeyTest[32163:5765000] TOTAL: あああ 
2015-07-15 13:51:12.054 japKeyTest[32163:5765000] ADDED: a 
2015-07-15 13:51:12.055 japKeyTest[32163:5765000] TOTAL: ああああああ 

atteso:

2015-07-15 13:51:10.156 japKeyTest[32163:5765000] ADDED: a 
2015-07-15 13:51:10.167 japKeyTest[32163:5765000] TOTAL: あ 
2015-07-15 13:51:11.376 japKeyTest[32163:5765000] ADDED: a 
2015-07-15 13:51:11.378 japKeyTest[32163:5765000] TOTAL: ああ 
2015-07-15 13:51:12.054 japKeyTest[32163:5765000] ADDED: a 
2015-07-15 13:51:12.055 japKeyTest[32163:5765000] TOTAL: あああ 

Qualsiasi idea di come inserire il testo attribuito con tastiera giapponese e ottenere risultato normale? (Senza caratteri extra)

+0

È sorprendente la coincidenza: ho appena iniziato un nuovo lavoro e questo è uno dei primi bug che sto cercando di risolvere. Non posso credere che questo non stia influenzando migliaia di app che supportano il giapponese! –

+0

Inoltre: prova a digitare "mika" usando romaji e vedi se ottieni una "k" nel mezzo di caratteri extra! Sono sicuro che è lo stesso bug. –

+0

Questo succede anche con una normale tastiera inglese. – villy393

risposta

0

mia esperienza con questo mi ha dimostrato che il bug (e credo che sia un bug UIKit) si manifesta in qualsiasi momento viene modificato durante la proprietà -attributedText di un UITextField o UITextView-textView(Field)DidChange time (proprio come nel tuo esempio).

Nel mio caso sono stato in grado di modificare il codice in modo che l'aggiornamento non si verificasse durante quel periodo (l'aggiornamento nel mio caso non era affatto richiesto, quindi questo era facile).

Se è necessario aggiornare il testo attribuito in quel momento, tutto quello che posso raccomandare è presentare un bug con Apple e attendere (per sempre o più a lungo).

Si noti che si può anche vedere questo bug, anche se si sta aggiornando solo la proprietà -text di questi oggetti - perché UIKit a volte (? Sempre) andare avanti e aggiornare la proprietà -attributedText per voi quando si aggiorna -text. (Si può vedere questa sottoclasse questi oggetti e ridefinendo -setAttributedText: e l'impostazione di un punto di interruzione

Buona fortuna a voi

Edit:. Ho solo visto questo bug con le tastiere giapponesi finora, ma come io guadagno più esperienza con l'utilizzo la mia applicazione di altre lingue, non sarei sorpreso di vedere più problemi

2

This answer mi ha aiutato a capirlo:.. Controllare se markedTextRange sul UITextView non è nil Ciò significa che l'utente è al centro di inserire un carattere a più fasi. Tenere a bada la modifica del testo attribuito fino a quando non sono terminati.

Problemi correlati