2015-07-15 6 views
7

मुझे पाठ दृश्य में दो अलग-अलग फोंट का उपयोग करने की आवश्यकता है, इसलिए मैंने टेक्स्ट ViewDidChange में टेक्स्ट को जिम्मेदार सेट किया है। लेकिन जापानी कीबोर्ड के लिए इनपुट वर्ण बार-बार दर्ज किया जाता है।जापानी कीबोर्ड के साथ UITextView विशेषता वितरित इनपुट

यह अंग्रेजी कीबोर्ड के लिए काम करता है। जब आप जिम्मेदार टेक्स्ट के बजाय सामान्य टेक्स्ट का उपयोग करते हैं तो यह जापानी कीबोर्ड के लिए भी काम करता है।

मेरे कोड:

- (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; 
} 

आउटपुट:

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: ああああああ 

अपेक्षित:

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: あああ 

किसी भी विचार कैसे जापानी कीबोर्ड के साथ जिम्मेदार ठहराया पाठ दर्ज और सामान्य परिणाम प्राप्त करने के? (अतिरिक्त वर्ण के बिना)

+0

यह आश्चर्यजनक है: मैंने अभी एक नई नौकरी शुरू की है और यह पहली बग्स में से एक है जिसे मैं ठीक करने की कोशिश कर रहा हूं। मुझे विश्वास नहीं है कि यह जापानी समर्थन करने वाले हजारों ऐप्स को प्रभावित नहीं कर रहा है! –

+0

इसके अलावा: रोमाजी का उपयोग करके "मिका" टाइप करने का प्रयास करें और देखें कि क्या आपको अतिरिक्त पात्रों के बीच में "के" मिलता है या नहीं! मुझे यकीन है कि यह वही बग है। –

+0

यह मेरे लिए एक सामान्य अंग्रेजी कीबोर्ड के साथ भी होता है। – villy393

उत्तर

0

इस के साथ मेरा अनुभव मुझे पता चला है कि बग (और मुझे विश्वास है कि यह एक UIKit बग है) किसी भी समय प्रकट होता है एक UITextField या UITextView की -attributedText संपत्ति के दौरान संशोधित किया गया है - textView(Field)DidChange time (सिर्फ अपने उदाहरण की तरह)।

मेरे मामले में मैं कोड बदलने में सक्षम था ताकि अद्यतन उस समय के दौरान न हो (मेरे मामले में अद्यतन की आवश्यकता नहीं थी, इसलिए यह आसान था)।

यदि आपको उस समय जिम्मेदार पाठ को अपडेट करने की आवश्यकता है, तो मैं अनुशंसा कर सकता हूं कि ऐप्पल के साथ एक बग फाइल करें और प्रतीक्षा करें (हमेशा या अधिक)।

नोट है कि आप भी इस बग देख सकते हैं भले ही आप केवल इन वस्तुओं में से -टेक्स्ट संपत्ति अद्यतन कर रहे हैं - क्योंकि UIKit कभी कभी (? हमेशा) आगे जाना है और जब आप -text अद्यतन आप के लिए -attributedText संपत्ति अद्यतन करेगा। (आप इन वस्तुओं उपवर्गीकरण और -setAttributedText: अधिभावी और स्थापित करने के लिए एक ब्रेकपाइंट से यह देख सकते

गुड लक के लिए आप

संपादित करें:। मैं केवल जापानी कीबोर्ड के साथ इस बग अब तक देखा है, लेकिन मैं और अधिक अनुभव हासिल रूप में अन्य भाषाओं की मेरे ऐप की उपयोग के साथ, मैं और अधिक समस्याओं को देखने के लिए आश्चर्य नहीं होगा

2

This answer मदद की मुझे यह पता लगा:।। चेक अगर markedTextRange UITextView पर नहीं के बराबर नहीं है इसका मतलब है कि उपयोगकर्ता बीच में है एक बहुस्तरीय चरित्र इनपुट करने के लिए। जब ​​तक वे पूरा नहीं कर लेते हैं तो जिम्मेदार पाठ को संपादित करने पर रोकें।

संबंधित मुद्दे