2012-03-30 125 views
3

解雇模式视图控制器时,冻结该工程对iPhone BTW(无论运行iOS 5.1)应用程序在iPad上

我的应用程序冻结当我打电话[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 

任何想法?

我似乎无法找到这个东西不工作的理由...

回答

2

自公司的iPad也许当你想提出的观点,你可以使用一个UIPopOverController。尝试创建一个UIPopOverController,为您的模态视图启动视图控制器。您可以设置大小以及从何处弹出。您可以将它被调用的类设置为视图的委托,以便您可以获取通知。

希望这有助于

0

试试这个:

[self dismissModalViewControllerAnimated:NO]; 
+0

在我的代码的哪一部分? – Armand 2012-03-30 07:21:53

+0

_I曾尝试解散模式在我完成function_ - 我想在你的功能:) – beryllium 2012-03-30 07:23:10

+0

哈哈刚刚尝试过那里,但然后该应用程序只是冻结,什么也不做,并没有任何响应 – Armand 2012-03-30 07:24:03

0

尝试检查多少次doneEditing被称为例如与NSLog在那里。

编辑:

尝试驳回modalViewController之前添加延迟:

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

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

它只被调用一次 – Armand 2012-04-02 06:51:53

+0

好吧,viewDidAppear在你的WorkflowViewController实际上被调用吗?哦,调用了多少次textViewDidBeginEditing(也许您不止一次地展示了WorkflowViewController)。 – ader 2012-04-02 09:00:11

+0

另一个想法,你有一个短暂的延迟后,如半秒后尝试dismissModalViewControllerAnimated。见上面的编辑。 – ader 2012-04-02 16:09:19

0

确保您的文本视图正确地从屏幕贬之前辞职第一响应者的地位。

是这样的: [inputText resignFirstResponder];

0

尝试这种

[multiLineText popViewControllerAnimated:YES];

0

我不明白你行

[multiLineText dismissModalViewControllerAnimated:NO]; 

因为multiLineText它的模态视图控制器,该辞退必须由视图控制器被称为呈现它,也就是,在你的第一个例子(因为你已经设置代表到视图控制器)

[multiLineText.delegate dismissModalViewControllerAnimated:NO]; 

应该工作。您将代表设置为零以避免解雇两次。

0

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

苹果最近玩弄了这种工作方式。尝试发送到模式本身。

相关问题