2013-09-21 2 views
2

есть очень странная проблема здесь, это не произойдет до прошивки 7 ...тупиков при смене первого ответчика от UITextField к UITextView [IOS 7]

У меня есть UITextField и UITextView в форме, я создал. .. проблема в том, что если у пользователя есть текстовое поле в качестве первого ответчика, тогда наступает на uitextview, происходит блокировка, память будет увеличиваться до тех пор, пока сторожевой таймер не убьет мое приложение.

Этого не происходит, когда я перехожу от uitextview к uitextfield

Релевантный код:

#pragma mark - UITextView Delegate 
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 

if ([text isEqualToString:@"\n"]) { 
    [textView resignFirstResponder]; 
} 

NSUInteger newLength = [textView.text length] + [text length] - range.length; 

return (newLength > 120) ? NO : YES; 

} 

-(void)textViewDidEndEditing:(UITextView *)textView { 

if (textView.tag == CreatePlaceElementDescription) { 
    self.marker.info = textView.text; 
} 
else if (textView.tag == CreatePlaceElementAddress) { 
    self.marker.address = textView.text; 
} 
} 

#pragma mark - UITextField Delegate 
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

if ([string isEqualToString:@"\n"]) { 
    [textField resignFirstResponder]; 
} 

NSUInteger newLength = [textField.text length] + [string length] - range.length; 

//Limit name textfield length 
return (newLength > 60) ? NO : YES; 
} 

-(void)textFieldDidEndEditing:(UITextField *)textField { 

if (textField.tag == CreatePlaceElementName) { 
    self.marker.name = textField.text; 
} 

} 

Там нет ничего больше к этому, чем ...

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

также тупиковый происходит на TextView: didEndEditing, (как будто TextView был один в отставку клавиатуры не текстовое поле, текстовое поле: didEndEditing также называется) .. TextView: didEndEditing не должен быть назван в любом месте

это действительно непостижимо мой разум ... любые предложения?

+0

Любая причина, по которой я ниспровергаюсь? пожалуйста, будьте полезны и, по крайней мере, скажите мне, в каком направлении я ошибаюсь ... я проверил все свое приложение, и эта ошибка действительно искажает мой разум. –

ответ

0

Ok я получил то, что проблема

я использую DaKeyboardControl корректировать взгляды, когда появляется клавиатура ... что странно, что, кажется, это разбито на 7 прошивке при смене служб быстрого реагирования (не будет войдите в тупик, когда присутствует только одно текстовое поле/текстовое поле) ... я открываю отчет BUG для своих githubs, пока я рисую, какая строка производит эту ошибку ... когда у меня есть, я поделюсь ею по EDIT с вы

РЕДАКТИРОВАТЬ: Проблема в приемниках UIKeyboardWillShowNotification ... это уведомление вызывается несколько раз ... решение, похоже, должно использовать UIKeyboardDidChangeFrameNotification или UIKeyboardWillChangeFrameNotification для p erform изменение кадра ...

Я надеюсь, что это может помочь кому-то ... не знаю, если использование UIKeyboardWillShowNotification будет представлять проблемы для людей, не использующих IOS 7 теперь

+0

Как вы на самом деле изменили использование разных уведомлений с помощью DAKeyboardControl? –

+0

Извините, мой поздний ответ, вот .h http://pastebin.com/xwRE7MCw и вот измененная версия .m http://pastebin.com/kzBx7b6r, я даю вам это, потому что я также добавил некоторые BOOLeans для узнайте, когда клавиатура выключена с помощью патча обезьяны, магия уведомления происходит при добавлении addKeyboardControl и removeKeyboardControl (прокомментированные строки)! –

1

Я просто удалось это исправить путем модификации метода inputKeyboardDidShow в DAKeyboardControl.m, как показано ниже:

- (void)inputKeyboardDidShow 
{ 
    // Grab the keyboard view 
    if(self.keyboardActiveInput.inputAccessoryView.superview){ 
     self.keyboardActiveView = self.keyboardActiveInput.inputAccessoryView.superview; 
     self.keyboardActiveView.hidden = NO; 
    } 

    // If the active keyboard view could not be found (UITextViews...), try again 
    if (!self.keyboardActiveView) { 
     // Find the first responder on subviews and look re-assign first responder to it 
     [self reAssignFirstResponder]; 
    } 
} 
Смежные вопросы