Я пытаюсь встроить редактируемый UITextView внутри UIPopoverController, с ... странными результатами. Я сделал следующие шаги:Может ли редактируемый UITextView быть встроен в UIPopoverController?
- Создайте пользовательский класс UIViewController и создайте файл .xib с этим контроллером с UITextView внутри него.
- Когда действие UI, которое должно вызвать контроллер, происходит (коснитесь внутри), я создаю экземпляр контроллера и его представление из файла .xib.
- Я создаю новый UIPopoverController, с контроллером представления, который я просто создавал как представление содержимого.
- Я представляю его с presentPopoverFromRect: INview: permittedArrowDirections: анимированные:
Вот пример кода:
- (void)noteButtonPressed:(id)sender {
self.noteview = [[MyTextPopupViewController alloc] initWithNibName:@"MyTextPopupViewController" bundle:nil ];
UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:self.noteview];
self.popover = popoverController;
self.popover.delegate = self;
[self.popover presentPopoverFromRect:((UIView*)sender).frame
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
Затем внутри MyTextPopupViewController, я убедиться, что вид текста является первым ответчиком в поднять клавиатуру:
- (void)viewDidAppear:(BOOL)animated {
[self.view becomeFirstResponder];
[super viewDidAppear:animated];
}
И все работает ... прямо до этого нет. Иногда он работает отлично; в других случаях, сразу или после нескольких нажатий клавиш, приложение вылетает из цикла основного события (!). Никакое исключение не выбрасывается (по крайней мере, не то, что lldb ловит), но приложение просто останавливается, как на симуляторе, так и на оборудовании.
Любые мысли? Кто-нибудь получил эту работу успешно, или знает наверняка, что это не так?
В 'MyTextPopupViewController' вы реализуете' textView: shouldChangeTextInRange: replacementText: '(или любой другой метод делегата, который может вызвать проблемы здесь)? Если да, отправьте этот код. – lnafziger
Кроме того, вы должны переключить две строки в вашем 'viewDidAppear', чтобы супер было правильно вызвано, прежде чем что-либо делать. – lnafziger
В настоящее время я не применяю ни один из методов UITextViewDelegate. – Christophe