Я программно заменяю UITextField на UITextView, но, похоже, это что-то нарушает в коде Apple.
Класс, который выполняет переключение, является делегатом для обоих.Все методы делегата в FIELD работают правильно - я использую "didBeginEditing", чтобы вызвать переключение из FIELD -> VIEW.
Методы didBeginEditing / shouldBeginEditing в VIEW также вызываются корректно.
Однако ... методы shouldEndEditing / didEndEditing делегата VIEW никогда не вызываются.Неважно, как я убираю фокус, они никогда не вызываются (у меня они имеют точки останова, также с лог-операторами).например, НИКАКАЯ из следующих работ:
- Коснитесь другого текстового поля на экране (делегат FIELD получит «shouldBegin» и «didBegin» - делегат VIEW получит ничего )
- Использование распознавателя жестов в фоновом представлении для вызова «resignFirstResponder» для каждого элемента на экране (если выбрано другое поле, делегат FIELD получает «shouldEnd» и «didEnd». VIEW получает даже nothing если он выбран)
Тот факт, что должны / должны начаться методы, вызывается, показывает, что делегат был назначен в порядке и работает правильно - но почему / как игнорируются методы завершения / завершения.?Как будто у Apple есть ошибка в их коде для обнаружения существования этих методов.
Примечание: я использовал автозаполнение Xcode / content-assist для создания методов, поэтому я уверен, что опечаток нет.Просто чтобы быть ясно:
-(BOOL)textViewShouldEndEditing:(UITextView *)textView
{
textComments.text = textView.text;
[textView.superview insertSubview:self.textComments aboveSubview:textView];
[textView removeFromSuperview];
return TRUE;
}
-(void)textViewDidEndEditing:(UITextView *)textView
{
textComments.text = textView.text;
[textView.superview insertSubview:self.textComments aboveSubview:textView];
[textView removeFromSuperview];
}
-(BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
NSLog(@"blah" );
return TRUE;
}
-(void)textViewDidBeginEditing:(UITextView *)textView
{
NSLog(@"blah" );
}