2013-03-10 5 views
4

My ViewController реализует UITextView метод делегирования textViewDidChangeSelection. Все работает так, как ожидалось, при тестировании. Однако, если приложение помещается в фоновом режиме, а затем снова становится активным, метод делегирования не вызывается при изменении выбора в TextView. Кто-нибудь еще, у кого была эта проблема?UITextView метод делегата textViewDidChangeSelection не получает вызов при возврате из фона

Мой UITextView подкласс делает это:

self.inputView = [[UIView alloc] initWithFrame:CGRectZero]; 

Выше для того, чтобы клавиатура не показывать, но в то же время сохраняя включен TextView.

подкласс также делает это:

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{ 
{ 
    if ([UIMenuController sharedMenuController]) 
    { 
     [UIMenuController sharedMenuController].menuVisible = NO; 
    } 
    return NO; 
} 

Это делается для того, чтобы не показать копию пасты всплывал при нажатии UITextView. Я думаю, что этот метод выглядит немного странно, но я нашел его на SO некоторое время назад, и он сделал то, что должен.

+0

Возможно, ваш контроллер просмотра выпущен на фоне и воссоздан при входе на передний план. Тогда textView.delegate будет нулевым. Можете ли вы проверить это? –

+0

Я протестировал, если он был ноль в методе didBecomeActive appDelegate, это не так. Я также проверил снова установку ViewController в качестве делегата в этом методе. – empee

+0

Возможно, ваш textView станет нулевым. Попробуйте установить делегат в viewDidAppear: например. –

ответ

1

Что решило проблему для меня было назвать

[myTextView reloadInputViews] 

В методе AppDelegate:

-(void)applicationWillEnterForeground: 

Я не знаю точно, почему это работает, так что если кто-то имеет какие-либо хорошее объяснение, это было бы очень оценено.

1

UITextView метод делегирования textViewDidChangeSelection:будет пожара снова, когда приложение вернется с фона. Так что в вашем приложении должно быть что-то еще.

Просто, чтобы убедиться, что я создал простое приложение с 2 UITextView управления, установите их делегат будет контроллером представления и добавил этот битый код:

- (void) textViewDidChangeSelection:(UITextView *)textView 
{ 
    NSLog(@"Fire change selection."); 
} 

прекрасно работает как перед фоновым режимом приложения и после прихода назад из фонового рисунка.