2012-03-30 126 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:消息發送給模態本身。

蘋果最近玩弄了這種工作方式。嘗試發送到模式本身。

相關問題