Приложение зависает при отключении контроллера модального вида на iPad - PullRequest
3 голосов
/ 30 марта 2012

Это работает на iPhone BTW (оба работают под управлением iOS 5.1)

Мое приложение зависает, когда я звоню [self dismissModalViewControllerAnimated:NO];

Я пробовал много разных подходов:

Мой код, как у меня сейчас:

-(void) doneEditing:(NSString *)value
{
    [multiLineText dismissModalViewControllerAnimated:NO];
    self.currentActiveTextView.text = value;
    self.currentActiveTextView = nil;
}

- (void)textViewDidBeginEditing:(UITextView *)textView
{
    multiLineText = [[MultilineTextViewController alloc] init];
    multiLineText.delegate = self;
    multiLineText.text = textView.text;
    self.currentActiveTextView = textView;
    [self presentModalViewController:multiLineText animated:NO];
}

MultilineTextViewController.h

@protocol DoneEditing
    -(void)doneEditing:(NSString*)value;
@end

@interface MultilineTextViewController : UIViewController
{
    UITextView *inputText;
    id<DoneEditing> delegate;
}
@property (nonatomic, strong) NSString *text;
@property (nonatomic, strong) id<DoneEditing> delegate;
@end

Функция вызывается из кнопки «Готово»

-(void) done:(id)sender
{
    [delegate doneEditing:inputText.text];
}

Я пытался отключить модал в моей готовой функции Я пробовал это в обоих местах с собой Я также пробовал это в MultilineTextViewController

if ([[self parentViewController] respondsToSelector:@selector(dismissModalViewControllerAnimated:)]){

    [[self parentViewController] dismissModalViewControllerAnimated:NO];

} else {

    [[self presentingViewController] dismissViewControllerAnimated:NO completion:nil];
}

Просто некоторая история, когда пользователь нажимает UITextView, который я использую, чтобы открыть новый ModalViewController, чтобы предоставить пользователю больше места для ввода большого количества текста, после завершения пользователь нажимает «Готово», и я вызываю метод делегата для положить текст в оригинальной форме.

Если я изменю анимацию на да в любом из приведенных выше случаев, она все равно не будет работать, но вместо зависания я получу NSInternalInconsistencyException

Attempting to begin a modal transition from <WorkflowViewController: 0xc6846b0> to <MultilineTextViewController: 0xc64b960> while a transition is already in progress. Wait for viewDidAppear/viewDidDisappear to know the current transition has completed

Есть идеи?

Кажется, я не могу найти причину, по которой эта штука не работает ...

Ответы [ 7 ]

2 голосов
/ 02 апреля 2012

Начиная с iPad, возможно, вы можете использовать UIPopOverController, когда хотите представить представление. Попробуйте создать UIPopOverController, инициируя его с помощью контроллера представления для вашего модального представления. Вы можете установить размер и где он будет всплывать. Вы можете установить класс, из которого он вызывается, в качестве делегата для представления, чтобы вы могли получать уведомления.

Надеюсь, это поможет

0 голосов
/ 08 апреля 2012

В последних версиях iOS вы можете отправить dismissModalViewControllerAnimated: сообщение самому модалу.

Apple манипулировала тем, как это работает в последнее время. Попробуйте отправить самому модалу.

0 голосов
/ 08 апреля 2012

Я не понимаю вашу строку

[multiLineText dismissModalViewControllerAnimated:NO];

, поскольку multiLineText это ваш контроллер модального представления, dismiss должен вызываться представителем этого представления, т. Е. В вашем первом примере (так как у вас естьустановите делегата в представляющий контроллер представления)

[multiLineText.delegate dismissModalViewControllerAnimated:NO];

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

0 голосов
/ 06 апреля 2012

попробуйте

[multiLineText popViewControllerAnimated: YES];

0 голосов
/ 02 апреля 2012

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

Что-то вроде: [inputText resignFirstResponder];

0 голосов
/ 30 марта 2012

Попробуйте проверить, сколько раз вызывается doneEditing, например, с NSLog там.

Edit:

Попробуйте добавить задержку перед закрытием modalViewController:

[self performSelector:@selector(dismiss) withObject:nil afterDelay:1.0];

- (void)dismiss {
    [self dismissModalViewControllerAnimated:NO];
}
0 голосов
/ 30 марта 2012

Попробуйте это:

[self dismissModalViewControllerAnimated:NO];
...