解雇iPad上的模态视图控制器时应用冻结

时间:2012-03-30 07:15:15

标签: iphone ios ipad modalviewcontroller

适用于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];
}

我试过在我的done函数中解除模态 我曾在自己的两个地方尝试过 我也在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 个答案:

答案 0 :(得分:2)

由于它的iPad可能会在您想要呈现视图时使用UIPopOverController。尝试创建一个UIPopOverController,使用视图控制器为模态视图启动它。您可以设置大小和弹出位置。您可以将调用它的类设置为视图的委托,以便您可以收到通知。

希望这有帮助

答案 1 :(得分:0)

试试这个:

[self dismissModalViewControllerAnimated:NO];

答案 2 :(得分:0)

尝试检查调用doneEditing的次数,例如在那里有一个NSLog。

修改

尝试在解除modalViewController之前添加延迟:

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

- (void)dismiss {
    [self dismissModalViewControllerAnimated:NO];
}

答案 3 :(得分:0)

确保文本视图在从屏幕上解除之前正确地重新设置其第一响应者状态。

像: [inputText resignFirstResponder];

答案 4 :(得分:0)

试试这个

[multiLineText popViewControllerAnimated:YES];

答案 5 :(得分:0)

我不明白你的行

[multiLineText dismissModalViewControllerAnimated:NO];

因为multiLineText是你的模态视图控制器,所以必须由呈现它的视图控制器调用dismiss,即在你的第一个例子中(因为你已将委托设置为呈现视图控制器)

[multiLineText.delegate dismissModalViewControllerAnimated:NO];

应该有效。您将委托设置为nil以避免两次解雇。

答案 6 :(得分:0)

在iOS的最新版本中,您可以将dismissModalViewControllerAnimated:消息发送到模式本身。

苹果公司最近采用了这种方式。尝试发送到模态本身。