2015-06-28 6 views
1

Я хочу определить текущий режим ввода клавиатуры и изменить направление текста по отношению к нему (rtl, если арабский и ltr, если английский).UITextInputCurrentInputModeDidChangeNotification return nil in ios 8.3

В следующем коде:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [[NSNotificationCenter defaultCenter] 
     addObserver:self 
      selector:@selector(changeInputMode:) 
       name:UITextInputCurrentInputModeDidChangeNotification 
      object:nil 
    ]; 
} 

-(void)changeInputMode:(NSNotification *)notification 
{ 
    UITextInputMode *thisInputMode = [notification object]; 
    NSLog(@"inputMethod=%@",thisInputMode); 
} 

thisInputMode является nil!

Если я использую этот код вместо:

NSString *inputMethod = [[UITextInputMode currentInputMode] primaryLanguage]; 
    NSLog(@"inputMethod=%@",inputMethod); 

Он отлично работает и определяет текущий режим ввода, но currentInputMode является устаревшим.

Почему [notification object]nil?

ответ

0

activeInputModes Используйте свойство вместо currentInputMode

Из документации

Каждый элемент массива является экземпляром UITextInputMode. Возвращает пустой массив, если такие экземпляры не были установлены с помощью текстового ввода .

+0

Вы не можете использовать его вместо этого, потому что 'activeInputModes' возвращает все доступные режимы ввода, а не текущий – zxcat

0

Пожалуйста, проверьте this question and answers.

У этого есть несколько новых решений для получения текущего режима ввода клавиатуры и не использовать устаревший метод currentInputMode.